vacaboja / tg Goto Github PK
View Code? Open in Web Editor NEWA program for timing mechanical watches
License: GNU General Public License v2.0
A program for timing mechanical watches
License: GNU General Public License v2.0
Basically the name of the feature speaks of itself. I'd like to be able to manually change input audio device which the program will use.
I've implemented a self calibration. It depends on the computer clock being regulated to at least one second per day. On Linux systems NTPD regulates the time far more accurately. By comparing the sound data frame count to the clock one can accurately calibrate the actual frequency. Since the computer OS is not real time, one has to wait considerable time to get a horologically accurate rate, between 12 and 24 hours.
The self calibration watches a window average of the computed calibration correction, and when it is less than 0.001 s/day it will start updating the calibration every 10 minutes. I've attached two graphs of calibration value vs runtime. One can see that the calibration varies a lot a first, but after about 24 hours the variation is far less than the 0.1 s/day increment that the program currently uses to set the calibration. Just leave your computer running with the tg-timer for a day and you are all set.
if someone else has a fork, I could add it to yours if you like.
Problems with a wheel in the train can show themselves as periodic changes in amplitude or rate, with the period equal to the period of the wheel. E.g., one minute for the center wheel.
The time strip chart current has marks for 10 seconds and 1 minute. Allow custom tick marks, perhaps as marks on one side, at a custom interval. This can be set to the period of one of the wheels.
To be more accurate, the tick marks should not be based on elapsed time, but on ticks. The time would be more or less, depending on how slow or fast the watch is running at the moment. For example, a 15 tooth escapement in a 18,000 bph movement takes 3 seconds to revolve. But the the marks would be every 7.5 tick-tock pairs, not every 3 seconds. But just counting ticks would lead to long term errors for longer periods like the center wheel or the mainspring barrel, as tg will miss a few ticks due to problems with audio noise or quality. So it would be necessary to try to account for that.
Instead of just a single user supplied period, the user could inter the wheel train's information. The teeth on each wheel and the number of leaves its pinion. Then the period of each wheel could be automatically determined and multiple wheels could be shown at once. This might make it easier to identify when an error corresponds to the period of a wheel.
Instead of just a mark, a continuous sine wave could be drawn. The sine wave would show the position of the wheel in its revolution.
TG uses a custom text based format to save the snapshots. This makes it hard to load the data into another program, like R or Python. These tools could be used to do a more sophisticated analysis of the data, such as a generating an Allan deviation plot.
Use a more standard format, such as jSON or XML, for the save data. This will make it easier to import, since libraries for reading it are common on virtually all platforms. jSON is also text based and should be comparable in efficiency to the custom format tg uses.
A minor issue, when compiling (on Linux), I see the following warning.
src/algo.c: In function ‘locate_events’:
src/algo.c:609:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
events[i] + p->timestamp < p->sample_count ||
This is a potential risk, but not a major bug.
Hi,
I got this error when I try to laugh tg-timer:
||PaMacCore (AUHAL)|| Error on line 1277: err='-66748', msg=Unknown Error
Error opening audio input: Internal PortAudio error
Have you got a idea and and a solution to solve this?
Best regard
WARNING: Method userSpaceScaleFactor in class NSView is deprecated on 10.7 and later. It should not be used in new applications. Use convertRectToBacking: instead.
and
WARNING: 140: This application, or a library it uses, is using the deprecated Carbon Component Manager for hosting Audio Units. Support for this will be removed in a future release. Also, this makes the host incompatible with version 3 audio units. Please transition to the API's in AudioComponent.h.
I'm guessing the second is a GTK+2/3 issue as I believe gtk+3 does not use carbon. The first one, I am completely lost on - it looks like it's probably from somewhere up the dependency tree to me.
I would love to use tg-timer with clocks with low BPH such as mechanical wall clocks, for example one is running with 6300 bph. It seems to me code is not designed to process >0.5s periods so my hope for a quick fix is quite faint.
Please close if this is an inappropriate ticket / request, but i was thinking it would be helpful for users to have some kind of guidance on setting up their hardware to use with this tool maybe included in the readme (or even just a link to something)
The time strip graph, on the left side, is limited in the amount of time it can display based on the vertical resolution of the screen. The most it can do it about 3 minutes. Much less on a small screen.
For longer term accuracy, it would be good to have a longer strip available. As an example, a point where the center wheel binds would only show up every hour.
One idea is to support an alternate layout, which places the strip chart horizontally. This way it can be longer, since screens are wider than tall and the tg status bar would not be using space. One or more row(s) of the waveform displays could be eliminated in this layout.
Another idea is to support a zoom out mode. Each row (or column in a horizontal layout) would not be one sample, but multiple samples grouped together, providing a 2x, 3x, etc. zoom out factor.
Here are some ideas for different ways multiple samples could be shown in a single pixel/row of the strip chart:
Hi,
Whenever I click "CENTER" on the trace the program immediately crashes. The terminal shows zsh: segmentation fault tg-timer
Also attaching the OS "unexpected quit" report:
-------------------------------------
Translated Report (Full Report Below)
-------------------------------------
Process: tg-timer [43462]
Path: /opt/homebrew/*/tg-timer
Identifier: tg-timer
Version: ???
Code Type: ARM-64 (Native)
Parent Process: zsh [40657]
Responsible: Terminal [40655]
User ID: 501
Date/Time: 2023-03-30 18:32:59.3248 +0300
OS Version: macOS 13.2.1 (22D68)
Report Version: 12
Anonymous UUID: 74BAC681-36D2-B0CD-18F6-57CBBE946561
Sleep/Wake UUID: B90505FD-CA01-4EB9-976C-003A012566C4
Time Awake Since Boot: 88000 seconds
Time Since Wake: 7675 seconds
System Integrity Protection: enabled
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000
Exception Codes: 0x0000000000000001, 0x0000000000000000
Termination Reason: Namespace SIGNAL, Code 11 Segmentation fault: 11
Terminating Process: exc handler [43462]
VM Region Info: 0 is not in any region. Bytes before following region: 4376117248
REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL
UNUSED SPACE AT START
--->
__TEXT 104d64000-104d78000 [ 80K] r-x/r-x SM=COW ...ew/*/tg-timer
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 tg-timer 0x104d74498 handle_center_trace + 28
1 libgobject-2.0.0.dylib 0x105b7a5b4 _g_closure_invoke_va + 232
2 libgobject-2.0.0.dylib 0x105b7a5b4 _g_closure_invoke_va + 232
3 libgobject-2.0.0.dylib 0x105b9000c g_signal_emit_valist + 864
4 libgobject-2.0.0.dylib 0x105b90870 g_signal_emit + 28
5 libgtk-3.0.dylib 0x106033478 gtk_button_do_release + 68
6 libgtk-3.0.dylib 0x106032fe8 gtk_real_button_released + 208
7 libgobject-2.0.0.dylib 0x105b7a5b4 _g_closure_invoke_va + 232
8 libgobject-2.0.0.dylib 0x105b9000c g_signal_emit_valist + 864
9 libgobject-2.0.0.dylib 0x105b90870 g_signal_emit + 28
10 libgtk-3.0.dylib 0x106033548 multipress_released_cb + 48
11 libgtk-3.0.dylib 0x105ff7de0 _gtk_marshal_VOID__INT_DOUBLE_DOUBLEv + 80
12 libgobject-2.0.0.dylib 0x105b7a5b4 _g_closure_invoke_va + 232
13 libgobject-2.0.0.dylib 0x105b9000c g_signal_emit_valist + 864
14 libgobject-2.0.0.dylib 0x105b90870 g_signal_emit + 28
15 libgtk-3.0.dylib 0x1060e7e14 gtk_gesture_multi_press_end + 128
16 libgobject-2.0.0.dylib 0x105b7d6e8 g_cclosure_marshal_VOID__BOXEDv + 116
17 libgobject-2.0.0.dylib 0x105b7a5b4 _g_closure_invoke_va + 232
18 libgobject-2.0.0.dylib 0x105b9000c g_signal_emit_valist + 864
19 libgobject-2.0.0.dylib 0x105b90870 g_signal_emit + 28
20 libgtk-3.0.dylib 0x1060e6968 _gtk_gesture_set_recognized + 88
21 libgtk-3.0.dylib 0x1060e489c _gtk_gesture_check_recognized + 68
22 libgtk-3.0.dylib 0x1060e61e4 gtk_gesture_handle_event + 268
23 libgtk-3.0.dylib 0x1060e96c8 gtk_gesture_single_handle_event + 360
24 libgtk-3.0.dylib 0x1060b4050 gtk_event_controller_handle_event + 124
25 libgtk-3.0.dylib 0x106252a04 _gtk_widget_run_controllers + 124
26 libgtk-3.0.dylib 0x105ff34bc _gtk_marshal_BOOLEAN__BOXEDv + 124
27 libgobject-2.0.0.dylib 0x105b7a5b4 _g_closure_invoke_va + 232
28 libgobject-2.0.0.dylib 0x105b9000c g_signal_emit_valist + 864
29 libgobject-2.0.0.dylib 0x105b90870 g_signal_emit + 28
30 libgtk-3.0.dylib 0x106252634 gtk_widget_event_internal + 300
31 libgtk-3.0.dylib 0x10612b7f4 propagate_event + 388
32 libgtk-3.0.dylib 0x10612abfc gtk_main_do_event + 1068
33 libgdk-3.0.dylib 0x10598676c _gdk_event_emit + 64
34 libgdk-3.0.dylib 0x1059aa2b4 gdk_event_dispatch + 52
35 libglib-2.0.0.dylib 0x106901c3c g_main_context_dispatch + 256
36 libglib-2.0.0.dylib 0x106901f5c g_main_context_iterate + 436
37 libglib-2.0.0.dylib 0x106901fc4 g_main_context_iteration + 60
38 libgio-2.0.0.dylib 0x1067a49b0 g_application_run + 548
39 tg-timer 0x104d7109c main + 204
40 dyld 0x1a58c7e50 start + 2544
Thread 1:
0 libsystem_pthread.dylib 0x1a5bece18 start_wqthread + 0
Thread 2:: pool-spawner
0 libsystem_kernel.dylib 0x1a5bb584c __psynch_cvwait + 8
1 libsystem_pthread.dylib 0x1a5bf2638 _pthread_cond_wait + 1232
2 libglib-2.0.0.dylib 0x10694dabc g_cond_wait + 44
3 libglib-2.0.0.dylib 0x1068d33a4 g_async_queue_pop_intern_unlocked + 116
4 libglib-2.0.0.dylib 0x106928638 g_thread_pool_spawn_thread + 124
5 libglib-2.0.0.dylib 0x10692815c g_thread_proxy + 68
6 libsystem_pthread.dylib 0x1a5bf206c _pthread_start + 148
7 libsystem_pthread.dylib 0x1a5bece2c thread_start + 8
Thread 3:: gmain
0 libsystem_kernel.dylib 0x1a5bbd130 __select + 8
1 libglib-2.0.0.dylib 0x106910b64 g_poll + 424
2 libglib-2.0.0.dylib 0x106901efc g_main_context_iterate + 340
3 libglib-2.0.0.dylib 0x106901fc4 g_main_context_iteration + 60
4 libglib-2.0.0.dylib 0x10690335c glib_worker_main + 48
5 libglib-2.0.0.dylib 0x10692815c g_thread_proxy + 68
6 libsystem_pthread.dylib 0x1a5bf206c _pthread_start + 148
7 libsystem_pthread.dylib 0x1a5bece2c thread_start + 8
Thread 4:: caulk.messenger.shared:17
0 libsystem_kernel.dylib 0x1a5bb1fcc semaphore_wait_trap + 8
1 caulk 0x1af0d6cfc caulk::mach::semaphore::wait_or_error() + 28
2 caulk 0x1af0b9634 caulk::concurrent::details::worker_thread::run() + 56
3 caulk 0x1af0b9278 void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, void (caulk::concurrent::details::worker_thread::*)(), std::__1::tuple<caulk::concurrent::details::worker_thread*> > >(void*) + 96
4 libsystem_pthread.dylib 0x1a5bf206c _pthread_start + 148
5 libsystem_pthread.dylib 0x1a5bece2c thread_start + 8
Thread 5:
0 libsystem_pthread.dylib 0x1a5bece18 start_wqthread + 0
Thread 6:: com.apple.audio.IOThread.client
0 libsystem_kernel.dylib 0x1a5bb2050 mach_msg2_trap + 8
1 libsystem_kernel.dylib 0x1a5bc411c mach_msg2_internal + 80
2 libsystem_kernel.dylib 0x1a5bbac24 mach_msg_overwrite + 452
3 libsystem_kernel.dylib 0x1a5bb23cc mach_msg + 24
4 CoreAudio 0x1a8000bbc HALB_MachPort::SendSimpleMessageWithSimpleReply(unsigned int, unsigned int, int, int&, bool, unsigned int) + 104
5 CoreAudio 0x1a7ed3488 HALC_ProxyIOContext::IOWorkLoop() + 3612
6 CoreAudio 0x1a7ed2024 invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext(unsigned int, unsigned int) + 116
7 CoreAudio 0x1a805caec HALB_IOThread::Entry(void*) + 88
8 libsystem_pthread.dylib 0x1a5bf206c _pthread_start + 148
9 libsystem_pthread.dylib 0x1a5bece2c thread_start + 8
Thread 7:
0 libsystem_kernel.dylib 0x1a5bb584c __psynch_cvwait + 8
1 libsystem_pthread.dylib 0x1a5bf2638 _pthread_cond_wait + 1232
2 tg-timer 0x104d70690 computing_thread + 96
3 libsystem_pthread.dylib 0x1a5bf206c _pthread_start + 148
4 libsystem_pthread.dylib 0x1a5bece2c thread_start + 8
Thread 8:: com.apple.NSEventThread
0 libsystem_kernel.dylib 0x1a5bb2050 mach_msg2_trap + 8
1 libsystem_kernel.dylib 0x1a5bc411c mach_msg2_internal + 80
2 libsystem_kernel.dylib 0x1a5bbac24 mach_msg_overwrite + 452
3 libsystem_kernel.dylib 0x1a5bb23cc mach_msg + 24
4 CoreFoundation 0x1a5cd1bb0 __CFRunLoopServiceMachPort + 160
5 CoreFoundation 0x1a5cd049c __CFRunLoopRun + 1232
6 CoreFoundation 0x1a5ccf878 CFRunLoopRunSpecific + 612
7 AppKit 0x1a908019c _NSEventThread + 172
8 libsystem_pthread.dylib 0x1a5bf206c _pthread_start + 148
9 libsystem_pthread.dylib 0x1a5bece2c thread_start + 8
Thread 9:
0 libsystem_kernel.dylib 0x1a5bbd130 __select + 8
1 libglib-2.0.0.dylib 0x106910b64 g_poll + 424
2 libgdk-3.0.dylib 0x1059aa944 select_thread_func + 244
3 libsystem_pthread.dylib 0x1a5bf206c _pthread_start + 148
4 libsystem_pthread.dylib 0x1a5bece2c thread_start + 8
Thread 10:
0 libsystem_pthread.dylib 0x1a5bece18 start_wqthread + 0
Thread 11:
0 libsystem_pthread.dylib 0x1a5bece18 start_wqthread + 0
Thread 12:: CVDisplayLink
0 libsystem_kernel.dylib 0x1a5bb584c __psynch_cvwait + 8
1 libsystem_pthread.dylib 0x1a5bf2664 _pthread_cond_wait + 1276
2 CoreVideo 0x1adb1aa20 CVDisplayLink::waitUntil(unsigned long long) + 324
3 CoreVideo 0x1adb19af0 CVDisplayLink::runIOThread() + 504
4 libsystem_pthread.dylib 0x1a5bf206c _pthread_start + 148
5 libsystem_pthread.dylib 0x1a5bece2c thread_start + 8
Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x0000000135738760 x1: 0x00006000023611d0 x2: 0x0000000135738760 x3: 0x000000016b09a9d0
x4: 0x0000000104d7447c x5: 0x0000000000000000 x6: 0x0000000000000000 x7: 0x0000000105b7c9d4
x8: 0x0000000000000000 x9: 0x0000000000000000 x10: 0x0000000000000002 x11: 0x0000000000000001
x12: 0x0000000000000001 x13: 0x000000016b09a8d0 x14: 0x00000000000007fb x15: 0x00000000fda0a03f
x16: 0x00000001a5becaf0 x17: 0x00000000fda0a03f x18: 0x0000000000000000 x19: 0x00006000023611d0
x20: 0x000060000326aeb0 x21: 0x0000000000000000 x22: 0x000000016b09a9d0 x23: 0x0000000135738760
x24: 0x0000000000000000 x25: 0x0000000000000000 x26: 0x0000000000000002 x27: 0x0000000105b7c9d4
x28: 0x0000000000000000 fp: 0x000000016b09a810 lr: 0x0000000105b7a5b4
sp: 0x000000016b09a800 pc: 0x0000000104d74498 cpsr: 0x40001000
far: 0x0000000000000000 esr: 0x92000006 (Data Abort) byte read Translation fault
Binary Images:
0x104d64000 - 0x104d77fff tg-timer (*) <2b4812c5-9b9e-378f-95fe-925c31516fc8> /opt/homebrew/*/tg-timer
0x105b70000 - 0x105babfff libgobject-2.0.0.dylib (*) <73b4a699-9497-373d-809f-b5cd8a53e5ea> /opt/homebrew/*/libgobject-2.0.0.dylib
0x105fe8000 - 0x1065bbfff libgtk-3.0.dylib (*) <fad941d1-9627-327b-a7dd-950019751325> /opt/homebrew/*/libgtk-3.0.dylib
0x105970000 - 0x1059d7fff libgdk-3.0.dylib (*) <46f117b9-741e-304c-b029-d5c955e46ddf> /opt/homebrew/*/libgdk-3.0.dylib
0x1068c8000 - 0x1069b7fff libglib-2.0.0.dylib (*) <06451657-b400-3e07-945d-358f09f8c513> /opt/homebrew/*/libglib-2.0.0.dylib
0x10670c000 - 0x10683ffff libgio-2.0.0.dylib (*) <b5834437-3ede-3ead-a103-bc06ef14b64f> /opt/homebrew/*/libgio-2.0.0.dylib
0x1a58c2000 - 0x1a594cba3 dyld (*) <191e84f1-4b95-39c8-b253-1c1ef56c0fa8> /usr/lib/dyld
0x1a5beb000 - 0x1a5bf7ffb libsystem_pthread.dylib (*) <9f3b729a-ed04-3e65-adac-d75ad06ebbdc> /usr/lib/system/libsystem_pthread.dylib
0x1a5bb1000 - 0x1a5beafeb libsystem_kernel.dylib (*) <3dcd49b9-b3c5-3d90-be40-a3b807cb9cd7> /usr/lib/system/libsystem_kernel.dylib
0x1af0b7000 - 0x1af0e0fff com.apple.audio.caulk (1.0) <41def0d0-3b1f-3029-8e99-2c9304571021> /System/Library/PrivateFrameworks/caulk.framework/Versions/A/caulk
0x1a7ced000 - 0x1a83f4fff com.apple.audio.CoreAudio (5.0) <e182f603-d6fa-3458-afb4-e3ccf4273180> /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
0x1a5c50000 - 0x1a6127fff com.apple.CoreFoundation (6.9) <18260df4-69a8-30d3-8175-fb8ae7ae7709> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
0x1a8f1c000 - 0x1a9e27fff com.apple.AppKit (6.9) <88722053-0df0-3d4f-bf55-7e3c2d2c8e29> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
0x1adb17000 - 0x1adb78fff com.apple.CoreVideo (1.8) <9147e445-3e39-3d2b-b970-5b8a51a4c869> /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
External Modification Summary:
Calls made by other processes targeting this process:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
Calls made by this process:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
Calls made by all processes on this machine:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
VM Region Summary:
ReadOnly portion of Libraries: Total=1.0G resident=0K(0%) swapped_out_or_unallocated=1.0G(100%)
Writable regions: Total=1.3G written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=1.3G(100%)
VIRTUAL REGION
REGION TYPE SIZE COUNT (non-coalesced)
=========== ======= =======
Accelerate framework 128K 1
Activity Tracing 256K 1
CG backing stores 2944K 8
CG image 112K 5
ColorSync 528K 25
CoreAnimation 112K 7
CoreGraphics 48K 3
CoreUI image data 496K 7
Foundation 16K 1
Kernel Alloc Once 32K 1
MALLOC 299.4M 54
MALLOC guard page 192K 9
MALLOC_LARGE (reserved) 13.8M 1 reserved VM address space (unallocated)
MALLOC_MEDIUM (reserved) 568.0M 7 reserved VM address space (unallocated)
MALLOC_NANO (reserved) 384.0M 1 reserved VM address space (unallocated)
STACK GUARD 56.2M 13
Stack 14.4M 13
VM_ALLOCATE 384K 20
__AUTH 684K 174
__AUTH_CONST 12.2M 334
__CTF 756 1
__DATA 14.1M 355
__DATA_CONST 16.2M 373
__DATA_DIRTY 793K 115
__FONT_DATA 2352 1
__LINKEDIT 772.8M 39
__OBJC_CONST 1542K 148
__OBJC_RO 65.5M 1
__OBJC_RW 1988K 1
__TEXT 260.0M 389
dyld private memory 256K 1
mapped file 80.5M 28
shared memory 1440K 18
=========== ======= =======
TOTAL 2.5G 2155
TOTAL, minus reserved VM space 1.6G 2155
-----------
Full Report
-----------
{"app_name":"tg-timer","timestamp":"2023-03-30 18:32:59.00 +0300","app_version":"","slice_uuid":"2b4812c5-9b9e-378f-95fe-925c31516fc8","build_version":"","platform":1,"share_with_app_devs":0,"is_first_party":1,"bug_type":"309","os_version":"macOS 13.2.1 (22D68)","roots_installed":0,"incident_id":"D094112D-5EEF-423B-B428-4E19C7D07B61","name":"tg-timer"}
{
"uptime" : 88000,
"procRole" : "Foreground",
"version" : 2,
"userID" : 501,
"deployVersion" : 210,
"modelCode" : "Mac14,7",
"coalitionID" : 13257,
"osVersion" : {
"train" : "macOS 13.2.1",
"build" : "22D68",
"releaseType" : "User"
},
"captureTime" : "2023-03-30 18:32:59.3248 +0300",
"incident" : "D094112D-5EEF-423B-B428-4E19C7D07B61",
"pid" : 43462,
"translated" : false,
"cpuType" : "ARM-64",
"roots_installed" : 0,
"bug_type" : "309",
"procLaunch" : "2023-03-30 18:31:29.9661 +0300",
"procStartAbsTime" : 2110905037058,
"procExitAbsTime" : 2113049116428,
"procName" : "tg-timer",
"procPath" : "\/opt\/homebrew\/*\/tg-timer",
"parentProc" : "zsh",
"parentPid" : 40657,
"coalitionName" : "com.apple.Terminal",
"crashReporterKey" : "74BAC681-36D2-B0CD-18F6-57CBBE946561",
"responsiblePid" : 40655,
"responsibleProc" : "Terminal",
"wakeTime" : 7675,
"sleepWakeUUID" : "B90505FD-CA01-4EB9-976C-003A012566C4",
"sip" : "enabled",
"vmRegionInfo" : "0 is not in any region. Bytes before following region: 4376117248\n REGION TYPE START - END [ VSIZE] PRT\/MAX SHRMOD REGION DETAIL\n UNUSED SPACE AT START\n---> \n __TEXT 104d64000-104d78000 [ 80K] r-x\/r-x SM=COW ...ew\/*\/tg-timer",
"exception" : {"codes":"0x0000000000000001, 0x0000000000000000","rawCodes":[1,0],"type":"EXC_BAD_ACCESS","signal":"SIGSEGV","subtype":"KERN_INVALID_ADDRESS at 0x0000000000000000"},
"termination" : {"flags":0,"code":11,"namespace":"SIGNAL","indicator":"Segmentation fault: 11","byProc":"exc handler","byPid":43462},
"vmregioninfo" : "0 is not in any region. Bytes before following region: 4376117248\n REGION TYPE START - END [ VSIZE] PRT\/MAX SHRMOD REGION DETAIL\n UNUSED SPACE AT START\n---> \n __TEXT 104d64000-104d78000 [ 80K] r-x\/r-x SM=COW ...ew\/*\/tg-timer",
"extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
"faultingThread" : 0,
"threads" : [{"triggered":true,"id":1240914,"threadState":{"x":[{"value":5191731040},{"value":105553153364432},{"value":5191731040},{"value":6090762704},{"value":4376183932,"symbolLocation":0,"symbol":"handle_center_trace"},{"value":0},{"value":0},{"value":4390898132,"symbolLocation":0,"symbol":"g_cclosure_marshal_VOID__VOIDv"},{"value":0},{"value":0},{"value":2},{"value":1},{"value":1},{"value":6090762448},{"value":2043},{"value":4255162431},{"value":7075711728,"symbolLocation":0,"symbol":"pthread_mutex_unlock"},{"value":4255162431},{"value":0},{"value":105553153364432},{"value":105553169133232},{"value":0},{"value":6090762704},{"value":5191731040},{"value":0},{"value":0},{"value":2},{"value":4390898132,"symbolLocation":0,"symbol":"g_cclosure_marshal_VOID__VOIDv"},{"value":0}],"flavor":"ARM_THREAD_STATE64","lr":{"value":4390888884},"cpsr":{"value":1073745920},"fp":{"value":6090762256},"sp":{"value":6090762240},"esr":{"value":2449473542,"description":"(Data Abort) byte read Translation fault"},"pc":{"value":4376183960,"matchesCrashFrame":1},"far":{"value":0}},"queue":"com.apple.main-thread","frames":[{"imageOffset":66712,"symbol":"handle_center_trace","symbolLocation":28,"imageIndex":0},{"imageOffset":42420,"symbol":"_g_closure_invoke_va","symbolLocation":232,"imageIndex":1},{"imageOffset":42420,"symbol":"_g_closure_invoke_va","symbolLocation":232,"imageIndex":1},{"imageOffset":131084,"symbol":"g_signal_emit_valist","symbolLocation":864,"imageIndex":1},{"imageOffset":133232,"symbol":"g_signal_emit","symbolLocation":28,"imageIndex":1},{"imageOffset":308344,"symbol":"gtk_button_do_release","symbolLocation":68,"imageIndex":2},{"imageOffset":307176,"symbol":"gtk_real_button_released","symbolLocation":208,"imageIndex":2},{"imageOffset":42420,"symbol":"_g_closure_invoke_va","symbolLocation":232,"imageIndex":1},{"imageOffset":131084,"symbol":"g_signal_emit_valist","symbolLocation":864,"imageIndex":1},{"imageOffset":133232,"symbol":"g_signal_emit","symbolLocation":28,"imageIndex":1},{"imageOffset":308552,"symbol":"multipress_released_cb","symbolLocation":48,"imageIndex":2},{"imageOffset":64992,"symbol":"_gtk_marshal_VOID__INT_DOUBLE_DOUBLEv","symbolLocation":80,"imageIndex":2},{"imageOffset":42420,"symbol":"_g_closure_invoke_va","symbolLocation":232,"imageIndex":1},{"imageOffset":131084,"symbol":"g_signal_emit_valist","symbolLocation":864,"imageIndex":1},{"imageOffset":133232,"symbol":"g_signal_emit","symbolLocation":28,"imageIndex":1},{"imageOffset":1048084,"symbol":"gtk_gesture_multi_press_end","symbolLocation":128,"imageIndex":2},{"imageOffset":55016,"symbol":"g_cclosure_marshal_VOID__BOXEDv","symbolLocation":116,"imageIndex":1},{"imageOffset":42420,"symbol":"_g_closure_invoke_va","symbolLocation":232,"imageIndex":1},{"imageOffset":131084,"symbol":"g_signal_emit_valist","symbolLocation":864,"imageIndex":1},{"imageOffset":133232,"symbol":"g_signal_emit","symbolLocation":28,"imageIndex":1},{"imageOffset":1042792,"symbol":"_gtk_gesture_set_recognized","symbolLocation":88,"imageIndex":2},{"imageOffset":1034396,"symbol":"_gtk_gesture_check_recognized","symbolLocation":68,"imageIndex":2},{"imageOffset":1040868,"symbol":"gtk_gesture_handle_event","symbolLocation":268,"imageIndex":2},{"imageOffset":1054408,"symbol":"gtk_gesture_single_handle_event","symbolLocation":360,"imageIndex":2},{"imageOffset":835664,"symbol":"gtk_event_controller_handle_event","symbolLocation":124,"imageIndex":2},{"imageOffset":2533892,"symbol":"_gtk_widget_run_controllers","symbolLocation":124,"imageIndex":2},{"imageOffset":46268,"symbol":"_gtk_marshal_BOOLEAN__BOXEDv","symbolLocation":124,"imageIndex":2},{"imageOffset":42420,"symbol":"_g_closure_invoke_va","symbolLocation":232,"imageIndex":1},{"imageOffset":131084,"symbol":"g_signal_emit_valist","symbolLocation":864,"imageIndex":1},{"imageOffset":133232,"symbol":"g_signal_emit","symbolLocation":28,"imageIndex":1},{"imageOffset":2532916,"symbol":"gtk_widget_event_internal","symbolLocation":300,"imageIndex":2},{"imageOffset":1325044,"symbol":"propagate_event","symbolLocation":388,"imageIndex":2},{"imageOffset":1321980,"symbol":"gtk_main_do_event","symbolLocation":1068,"imageIndex":2},{"imageOffset":92012,"symbol":"_gdk_event_emit","symbolLocation":64,"imageIndex":3},{"imageOffset":238260,"symbol":"gdk_event_dispatch","symbolLocation":52,"imageIndex":3},{"imageOffset":236604,"symbol":"g_main_context_dispatch","symbolLocation":256,"imageIndex":4},{"imageOffset":237404,"symbol":"g_main_context_iterate","symbolLocation":436,"imageIndex":4},{"imageOffset":237508,"symbol":"g_main_context_iteration","symbolLocation":60,"imageIndex":4},{"imageOffset":625072,"symbol":"g_application_run","symbolLocation":548,"imageIndex":5},{"imageOffset":53404,"symbol":"main","symbolLocation":204,"imageIndex":0},{"imageOffset":24144,"symbol":"start","symbolLocation":2544,"imageIndex":6}]},{"id":1240918,"frames":[{"imageOffset":7704,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":7}]},{"id":1240920,"name":"pool-spawner","frames":[{"imageOffset":18508,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":8},{"imageOffset":30264,"symbol":"_pthread_cond_wait","symbolLocation":1232,"imageIndex":7},{"imageOffset":547516,"symbol":"g_cond_wait","symbolLocation":44,"imageIndex":4},{"imageOffset":45988,"symbol":"g_async_queue_pop_intern_unlocked","symbolLocation":116,"imageIndex":4},{"imageOffset":394808,"symbol":"g_thread_pool_spawn_thread","symbolLocation":124,"imageIndex":4},{"imageOffset":393564,"symbol":"g_thread_proxy","symbolLocation":68,"imageIndex":4},{"imageOffset":28780,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":7724,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1240921,"name":"gmain","frames":[{"imageOffset":49456,"symbol":"__select","symbolLocation":8,"imageIndex":8},{"imageOffset":297828,"symbol":"g_poll","symbolLocation":424,"imageIndex":4},{"imageOffset":237308,"symbol":"g_main_context_iterate","symbolLocation":340,"imageIndex":4},{"imageOffset":237508,"symbol":"g_main_context_iteration","symbolLocation":60,"imageIndex":4},{"imageOffset":242524,"symbol":"glib_worker_main","symbolLocation":48,"imageIndex":4},{"imageOffset":393564,"symbol":"g_thread_proxy","symbolLocation":68,"imageIndex":4},{"imageOffset":28780,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":7724,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1240934,"name":"caulk.messenger.shared:17","frames":[{"imageOffset":4044,"symbol":"semaphore_wait_trap","symbolLocation":8,"imageIndex":8},{"imageOffset":130300,"symbol":"caulk::mach::semaphore::wait_or_error()","symbolLocation":28,"imageIndex":9},{"imageOffset":9780,"symbol":"caulk::concurrent::details::worker_thread::run()","symbolLocation":56,"imageIndex":9},{"imageOffset":8824,"symbol":"void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, void (caulk::concurrent::details::worker_thread::*)(), std::__1::tuple<caulk::concurrent::details::worker_thread*> > >(void*)","symbolLocation":96,"imageIndex":9},{"imageOffset":28780,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":7724,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1240961,"frames":[{"imageOffset":7704,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":7}]},{"id":1240962,"name":"com.apple.audio.IOThread.client","frames":[{"imageOffset":4176,"symbol":"mach_msg2_trap","symbolLocation":8,"imageIndex":8},{"imageOffset":78108,"symbol":"mach_msg2_internal","symbolLocation":80,"imageIndex":8},{"imageOffset":39972,"symbol":"mach_msg_overwrite","symbolLocation":452,"imageIndex":8},{"imageOffset":5068,"symbol":"mach_msg","symbolLocation":24,"imageIndex":8},{"imageOffset":3226556,"symbol":"HALB_MachPort::SendSimpleMessageWithSimpleReply(unsigned int, unsigned int, int, int&, bool, unsigned int)","symbolLocation":104,"imageIndex":10},{"imageOffset":1991816,"symbol":"HALC_ProxyIOContext::IOWorkLoop()","symbolLocation":3612,"imageIndex":10},{"imageOffset":1986596,"symbol":"invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext(unsigned int, unsigned int)","symbolLocation":116,"imageIndex":10},{"imageOffset":3603180,"symbol":"HALB_IOThread::Entry(void*)","symbolLocation":88,"imageIndex":10},{"imageOffset":28780,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":7724,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1240995,"frames":[{"imageOffset":18508,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":8},{"imageOffset":30264,"symbol":"_pthread_cond_wait","symbolLocation":1232,"imageIndex":7},{"imageOffset":50832,"symbol":"computing_thread","symbolLocation":96,"imageIndex":0},{"imageOffset":28780,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":7724,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1241002,"name":"com.apple.NSEventThread","frames":[{"imageOffset":4176,"symbol":"mach_msg2_trap","symbolLocation":8,"imageIndex":8},{"imageOffset":78108,"symbol":"mach_msg2_internal","symbolLocation":80,"imageIndex":8},{"imageOffset":39972,"symbol":"mach_msg_overwrite","symbolLocation":452,"imageIndex":8},{"imageOffset":5068,"symbol":"mach_msg","symbolLocation":24,"imageIndex":8},{"imageOffset":531376,"symbol":"__CFRunLoopServiceMachPort","symbolLocation":160,"imageIndex":11},{"imageOffset":525468,"symbol":"__CFRunLoopRun","symbolLocation":1232,"imageIndex":11},{"imageOffset":522360,"symbol":"CFRunLoopRunSpecific","symbolLocation":612,"imageIndex":11},{"imageOffset":1458588,"symbol":"_NSEventThread","symbolLocation":172,"imageIndex":12},{"imageOffset":28780,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":7724,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1241005,"frames":[{"imageOffset":49456,"symbol":"__select","symbolLocation":8,"imageIndex":8},{"imageOffset":297828,"symbol":"g_poll","symbolLocation":424,"imageIndex":4},{"imageOffset":239940,"symbol":"select_thread_func","symbolLocation":244,"imageIndex":3},{"imageOffset":28780,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":7724,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1241511,"frames":[{"imageOffset":7704,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":7}]},{"id":1243033,"frames":[{"imageOffset":7704,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":7}]},{"id":1243083,"name":"CVDisplayLink","frames":[{"imageOffset":18508,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":8},{"imageOffset":30308,"symbol":"_pthread_cond_wait","symbolLocation":1276,"imageIndex":7},{"imageOffset":14880,"symbol":"CVDisplayLink::waitUntil(unsigned long long)","symbolLocation":324,"imageIndex":13},{"imageOffset":10992,"symbol":"CVDisplayLink::runIOThread()","symbolLocation":504,"imageIndex":13},{"imageOffset":28780,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":7724,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]}],
"usedImages" : [
{
"source" : "P",
"arch" : "arm64",
"base" : 4376117248,
"size" : 81920,
"uuid" : "2b4812c5-9b9e-378f-95fe-925c31516fc8",
"path" : "\/opt\/homebrew\/*\/tg-timer",
"name" : "tg-timer"
},
{
"source" : "P",
"arch" : "arm64",
"base" : 4390846464,
"size" : 245760,
"uuid" : "73b4a699-9497-373d-809f-b5cd8a53e5ea",
"path" : "\/opt\/homebrew\/*\/libgobject-2.0.0.dylib",
"name" : "libgobject-2.0.0.dylib"
},
{
"source" : "P",
"arch" : "arm64",
"base" : 4395532288,
"size" : 6111232,
"uuid" : "fad941d1-9627-327b-a7dd-950019751325",
"path" : "\/opt\/homebrew\/*\/libgtk-3.0.dylib",
"name" : "libgtk-3.0.dylib"
},
{
"source" : "P",
"arch" : "arm64",
"base" : 4388749312,
"size" : 425984,
"uuid" : "46f117b9-741e-304c-b029-d5c955e46ddf",
"path" : "\/opt\/homebrew\/*\/libgdk-3.0.dylib",
"name" : "libgdk-3.0.dylib"
},
{
"source" : "P",
"arch" : "arm64",
"base" : 4404838400,
"size" : 983040,
"uuid" : "06451657-b400-3e07-945d-358f09f8c513",
"path" : "\/opt\/homebrew\/*\/libglib-2.0.0.dylib",
"name" : "libglib-2.0.0.dylib"
},
{
"source" : "P",
"arch" : "arm64",
"base" : 4403019776,
"size" : 1261568,
"uuid" : "b5834437-3ede-3ead-a103-bc06ef14b64f",
"path" : "\/opt\/homebrew\/*\/libgio-2.0.0.dylib",
"name" : "libgio-2.0.0.dylib"
},
{
"source" : "P",
"arch" : "arm64e",
"base" : 7072391168,
"size" : 568228,
"uuid" : "191e84f1-4b95-39c8-b253-1c1ef56c0fa8",
"path" : "\/usr\/lib\/dyld",
"name" : "dyld"
},
{
"source" : "P",
"arch" : "arm64e",
"base" : 7075704832,
"size" : 53244,
"uuid" : "9f3b729a-ed04-3e65-adac-d75ad06ebbdc",
"path" : "\/usr\/lib\/system\/libsystem_pthread.dylib",
"name" : "libsystem_pthread.dylib"
},
{
"source" : "P",
"arch" : "arm64e",
"base" : 7075467264,
"size" : 237548,
"uuid" : "3dcd49b9-b3c5-3d90-be40-a3b807cb9cd7",
"path" : "\/usr\/lib\/system\/libsystem_kernel.dylib",
"name" : "libsystem_kernel.dylib"
},
{
"source" : "P",
"arch" : "arm64e",
"base" : 7231729664,
"CFBundleShortVersionString" : "1.0",
"CFBundleIdentifier" : "com.apple.audio.caulk",
"size" : 172032,
"uuid" : "41def0d0-3b1f-3029-8e99-2c9304571021",
"path" : "\/System\/Library\/PrivateFrameworks\/caulk.framework\/Versions\/A\/caulk",
"name" : "caulk"
},
{
"source" : "P",
"arch" : "arm64e",
"base" : 7110316032,
"CFBundleShortVersionString" : "5.0",
"CFBundleIdentifier" : "com.apple.audio.CoreAudio",
"size" : 7372800,
"uuid" : "e182f603-d6fa-3458-afb4-e3ccf4273180",
"path" : "\/System\/Library\/Frameworks\/CoreAudio.framework\/Versions\/A\/CoreAudio",
"name" : "CoreAudio",
"CFBundleVersion" : "5.0"
},
{
"source" : "P",
"arch" : "arm64e",
"base" : 7076118528,
"CFBundleShortVersionString" : "6.9",
"CFBundleIdentifier" : "com.apple.CoreFoundation",
"size" : 5079040,
"uuid" : "18260df4-69a8-30d3-8175-fb8ae7ae7709",
"path" : "\/System\/Library\/Frameworks\/CoreFoundation.framework\/Versions\/A\/CoreFoundation",
"name" : "CoreFoundation",
"CFBundleVersion" : "1953.300"
},
{
"source" : "P",
"arch" : "arm64e",
"base" : 7129382912,
"CFBundleShortVersionString" : "6.9",
"CFBundleIdentifier" : "com.apple.AppKit",
"size" : 15777792,
"uuid" : "88722053-0df0-3d4f-bf55-7e3c2d2c8e29",
"path" : "\/System\/Library\/Frameworks\/AppKit.framework\/Versions\/C\/AppKit",
"name" : "AppKit",
"CFBundleVersion" : "2299.40.118"
},
{
"source" : "P",
"arch" : "arm64e",
"base" : 7209054208,
"CFBundleShortVersionString" : "1.8",
"CFBundleIdentifier" : "com.apple.CoreVideo",
"size" : 401408,
"uuid" : "9147e445-3e39-3d2b-b970-5b8a51a4c869",
"path" : "\/System\/Library\/Frameworks\/CoreVideo.framework\/Versions\/A\/CoreVideo",
"name" : "CoreVideo",
"CFBundleVersion" : "0.0"
}
],
"sharedCache" : {
"base" : 7071744000,
"size" : 3447455744,
"uuid" : "835716ae-b363-3187-b065-cf94139bfc85"
},
"vmSummary" : "ReadOnly portion of Libraries: Total=1.0G resident=0K(0%) swapped_out_or_unallocated=1.0G(100%)\nWritable regions: Total=1.3G written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=1.3G(100%)\n\n VIRTUAL REGION \nREGION TYPE SIZE COUNT (non-coalesced) \n=========== ======= ======= \nAccelerate framework 128K 1 \nActivity Tracing 256K 1 \nCG backing stores 2944K 8 \nCG image 112K 5 \nColorSync 528K 25 \nCoreAnimation 112K 7 \nCoreGraphics 48K 3 \nCoreUI image data 496K 7 \nFoundation 16K 1 \nKernel Alloc Once 32K 1 \nMALLOC 299.4M 54 \nMALLOC guard page 192K 9 \nMALLOC_LARGE (reserved) 13.8M 1 reserved VM address space (unallocated)\nMALLOC_MEDIUM (reserved) 568.0M 7 reserved VM address space (unallocated)\nMALLOC_NANO (reserved) 384.0M 1 reserved VM address space (unallocated)\nSTACK GUARD 56.2M 13 \nStack 14.4M 13 \nVM_ALLOCATE 384K 20 \n__AUTH 684K 174 \n__AUTH_CONST 12.2M 334 \n__CTF 756 1 \n__DATA 14.1M 355 \n__DATA_CONST 16.2M 373 \n__DATA_DIRTY 793K 115 \n__FONT_DATA 2352 1 \n__LINKEDIT 772.8M 39 \n__OBJC_CONST 1542K 148 \n__OBJC_RO 65.5M 1 \n__OBJC_RW 1988K 1 \n__TEXT 260.0M 389 \ndyld private memory 256K 1 \nmapped file 80.5M 28 \nshared memory 1440K 18 \n=========== ======= ======= \nTOTAL 2.5G 2155 \nTOTAL, minus reserved VM space 1.6G 2155 \n",
"legacyInfo" : {
"threadTriggered" : {
"queue" : "com.apple.main-thread"
}
},
"trialInfo" : {
"rollouts" : [
{
"rolloutId" : "5f72dc58705eff005a46b3a9",
"factorPackIds" : {
},
"deploymentId" : 240000015
},
{
"rolloutId" : "62b4513af75dc926494899c6",
"factorPackIds" : {
"COREOS_ICD" : "62fbe3cfa9a700130f60b3ea"
},
"deploymentId" : 240000019
}
],
"experiments" : [
{
"treatmentId" : "c28e4ee6-1b08-4f90-8e05-2809e78310a3",
"experimentId" : "6317d2003d24842ff850182a",
"deploymentId" : 400000013
}
]
}
}
Model: Mac14,7, BootROM 8419.80.7, proc 8:4:4 processors, 16 GB, SMC
Graphics: Apple M2, Apple M2, Built-In
Display: DELL P2722HE, 1920 x 1080 (1080p FHD - Full High Definition), Main, MirrorOff, Online
Display: Color LCD, 2560 x 1600 Retina, MirrorOff, Online
Memory Module: LPDDR5, Hynix
AirPort: spairport_wireless_card_type_wifi (0x14E4, 0x4378), wl0: Nov 30 2022 02:22:05 version 18.20.379.9.7.8.145 FWID 01-f2bc7a93
Bluetooth: Version (null), 0 services, 0 devices, 0 incoming serial ports
Network Service: Wi-Fi, AirPort, en0
USB Device: USB31Bus
USB Device: USB31Bus
USB Device: USB5806 Smart Hub
USB Device: USB 10/100/1000 LAN
USB Device: USB2806 Smart Hub
USB Device: Hub Feature Controller
Thunderbolt Bus: MacBook Pro, Apple Inc.
Thunderbolt Bus: MacBook Pro, Apple Inc.
There is an online lighting detector network. It has one interesting feature. It uses a GPS in two ways.
First you get the location of the detector. Second it uses an interupt from the GPS that it will generate every second. From two interupts and a clock counter, it get get the number of computer clock ticks in a second. Millionths of a second is possible. Very accurately and that handles temperature, voltage differences over time. A GPS is of course highly stable over time.
It might be an idea to add this in to get a very accurate reference clock that doesn't depend on sound cards etc.
Just an idea.
It would be really nice to support http://semver.org/.
It's picking up lots of support and provides a really easy to understand framework for picking version numbers.
Please ignore and close if you're already intending to do this. I just saw a 0.4.99 version number somewhere and thought it was worth highlighting.
I have a few acutrons that need to be regulated and I think this would be the perfect tool
The audio buffers as supplied by PortAudio should have timestamps. If the computer's clock is being synchronized with NTP, then these timestamps should be very accurate. More accurate than a typical quartz watch.
So it should be possible to use these timestamps to calibrate tg. The number of samples received vs the timestamps between those samples should give the actual sampling rate.
This can be done continuously, so that as the sampling rate changes with temperature the calibration changes too.
For this to work, it requires:
Currently, when using a mono input (I'm using a piezoelectric mic) tg gives the following error.
Error opening audio input: Invalid number of channels
I have tried reducing the number of channels at https://github.com/vacaboja/tg/blob/master/audio.c#L54 by doing
PaDeviceIndex defaultIndex = Pa_GetDefaultInputDevice();
int maxChannels = Pa_GetDeviceInfo(defaultIndex)->maxInputChannels;
err = Pa_OpenDefaultStream(&stream,maxChannels,0,paFloat32,PA_SAMPLE_RATE,paFramesPerBufferUnspecified,paudio_callback,x);
Or even just forcing to 1, but this kills the signal entirely.
I'm not a C programmer at all, so I'm just fumbling around in the dark here really 😞
I see this on the snapshot tab
And this in the log:
(tg:42716): Gtk-WARNING **: Could not load a pixbuf from /org/gtk/libgtk/theme/Adwaita/assets/check-symbolic.svg.
This may indicate that pixbuf loaders or the mime database could not be found.
Icons seem to be missing across the interface. The open and close file dialogue suffers from the same fate.
I am unsure if this is a tg thing or a GTK+ thing?
I'm struggling to build this project on Windows.
I've installed and updated MSYS2 - no issues there.
I then tried pasting this entire code into the MSYS shell:
```sh
pacman -S mingw-w64-x86_64-gcc make pkg-config mingw-w64-x86_64-gtk3 mingw-w64-x86_64-portaudio mingw-w64-x86_64-fftw git autoconf automake libtool
git clone https://github.com/vacaboja/tg.git
cd tg
./autogen.sh
./configure
make
but nothing happened, it instantly returned to >
So I tried typing the lines following sh in one by one, the pacman and git lines directly into the MSYS shell, and the remainder into Mingw64.exe shell. The application build, but running it (as administrator, and after copying all the .dlls from a released version of TG) produced the dreaded:
the application was unable to start correctly (0xc00007b)
Any suggestions?
I've built this on a raspberry pi with a 7 inch LCD. Is there a way to adjust the programs screen size by modifying the code or config file associated with it?
TG detects my Swiza clock and Timex watch without any trouble, they both run at 18000 BPH. But TG struggles to detect my portable alarm clock which runs at 14400 BPH, and completely fails to detect my Equity alarm clock which runs at 12000 BPH. All tests were done using my laptop's built-in microphone without any changes between tests. It picks up a fairly clean signal for being a laptop mic.
Video demonstration: https://www.youtube.com/watch?v=O1wFaMU1lsc
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.