├── .gitattributes ├── .gitignore ├── BUILDING.md ├── HISTORY.md ├── LICENSE ├── README.md ├── images ├── g-audio-data-types.png ├── g-audio-library.png ├── g-audio-logo.png ├── g-audio-logo.svg ├── g-audio-palettes.png ├── ieee-float-compare-snippet.png ├── playback.png └── playback.svg └── src ├── C++ ├── .gitignore ├── ReadMe.txt ├── base64.cpp ├── base64.h ├── dllmain.cpp ├── dr_flac.h ├── dr_wav.h ├── g_audio.cpp ├── g_audio.h ├── g_audio.rc ├── g_audio.sln ├── g_audio.vcxproj ├── g_audio.vcxproj.filters ├── id3tag.h ├── make.sh ├── make_linx.sh ├── miniaudio.h ├── minimp3.h ├── minimp3_ex.h ├── resource.h ├── stb_image.h ├── stb_vorbis.h ├── stdafx.cpp ├── stdafx.h ├── targetver.h ├── thread.h ├── thread_safety.cpp ├── thread_safety.h └── xcode │ ├── .gitignore │ ├── g_audio │ └── Info.plist │ ├── g_audio_64.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── g_audio.xcscheme │ └── xcode.h └── LabVIEW ├── G-Audio.lvproj ├── G-Audio ├── Audio Devices │ ├── Capture Audio.vim │ ├── Clear Audio Backend.vi │ ├── Clear Audio Device.vi │ ├── Configure Audio Device.vi │ ├── Get Audio Device Configuration.vi │ ├── Get Audio Device Volume.vi │ ├── Playback Audio.vim │ ├── Playback Wait.vi │ ├── Query Audio Backends.vi │ ├── Query Audio Devices.vi │ ├── Set Audio Device Volume.vi │ ├── Start Audio Device.vi │ └── Stop Audio Device.vi ├── Audio Files │ ├── Close Audio File.vi │ ├── Get Audio File Info.vi │ ├── Get Audio File Position.vi │ ├── Get Audio File Tags.vi │ ├── Open Audio File Read.vi │ ├── Open Audio File Write.vi │ ├── Polymorphic VIs │ │ ├── Get Audio File Info (Path).vi │ │ ├── Get Audio File Info (UTF-8).vi │ │ ├── Get Audio File Tags (Path).vi │ │ ├── Get Audio File Tags (UTF-8).vi │ │ ├── Open Audio File Read (Path).vi │ │ ├── Open Audio File Read (UTF-8).vi │ │ ├── Open Audio File Write (WAV) (UTF-8).vi │ │ ├── Open Audio File Write (WAV).vi │ │ ├── Quick Load Audio File (Path).vi │ │ └── Quick Load Audio File (UTF-8).vi │ ├── Private │ │ ├── Get Audio File Info (Core).vi │ │ ├── Get Audio File Tags (Core).vi │ │ ├── Open Audio File Read (Core).vi │ │ ├── Open Audio File Write (WAV) (Core).vi │ │ └── Quick Load Audio File (Core).vi │ ├── Quick Load Audio File.vi │ ├── Read Audio File.vim │ ├── Seek Audio File.vi │ └── Write Audio File.vim ├── Audio Processing │ └── Channel Conversion.vim ├── Controls │ ├── Audio Device Advanced Config.ctl │ ├── Audio Device Config.ctl │ ├── Audio Device Format.ctl │ ├── Audio Device Info.ctl │ ├── Audio Device Native Data Format.ctl │ ├── Audio Device Refnum.ctl │ ├── Audio Device Type.ctl │ ├── Audio File Codec.ctl │ ├── Audio File Image Type.ctl │ ├── Audio File Image.ctl │ ├── Audio File Info.ctl │ ├── Audio File Refnum.ctl │ ├── Audio File Tag.ctl │ ├── Backends.ctl │ ├── Text Encoding.ctl │ ├── WAV Codec Specific Info.ctl │ ├── WAV Container Format.ctl │ └── WAV Data Format.ctl ├── Examples │ ├── Audio Capture Example.vi │ ├── Audio File Tags Example.vi │ ├── Audio Loopback Example.vi │ ├── Audio Playback Example.vi │ ├── IEEE Float Compare Example.vi │ ├── LINX │ │ ├── Audio Playback Example (LINX).vi │ │ └── Sample Pad Example (LINX).vi │ ├── Media Player Example.vi │ ├── Minimize Memory Example.vi │ ├── Mixer Example.vi │ ├── Music Visualizer Example.vi │ ├── Playback Latency Compare Example.vi │ ├── Query Audio Devices Example.vi │ ├── Sample Pad Example (Arduino Controller).vi │ ├── Sample Pad Example.vi │ ├── Samples │ │ └── Sample Pad Example │ │ │ ├── 01-snare.flac │ │ │ ├── 02-kick.flac │ │ │ ├── 03-tom.flac │ │ │ ├── 04-tom.flac │ │ │ ├── 05-tom.flac │ │ │ ├── 06-drop.flac │ │ │ ├── 07-ringring.flac │ │ │ ├── 08-dialup.flac │ │ │ ├── 09-boing.flac │ │ │ ├── 10-chicken.flac │ │ │ ├── 11-wilhelm.flac │ │ │ ├── 12-vroom.flac │ │ │ ├── 13-jump.flac │ │ │ ├── 14-lazer.flac │ │ │ ├── 15-powerup.flac │ │ │ └── 16-fanfare.flac │ ├── SubVIs │ │ ├── Generate Signal Components.vim │ │ └── Music Visualizer (Queue Only).vi │ └── Write Audio File Example.vi ├── G-Audio.lvlib ├── Mixer │ ├── Channel │ │ ├── Channel.lvclass │ │ ├── Community │ │ │ ├── Clear.vi │ │ │ ├── Init.vi │ │ │ ├── Load.vi │ │ │ ├── Pause.vi │ │ │ ├── Play.vi │ │ │ ├── Read Audio Data.vi │ │ │ ├── Read Status.vi │ │ │ ├── Stop.vi │ │ │ ├── Unload.vi │ │ │ └── Write Volume.vi │ │ ├── Controls │ │ │ ├── Channel State.ctl │ │ │ └── Channel Status.ctl │ │ └── Private │ │ │ ├── Load Async.vi │ │ │ └── Write Channel State.vi │ └── Mixer │ │ ├── Channel Load.vi │ │ ├── Channel Pause.vi │ │ ├── Channel Play.vi │ │ ├── Channel Stop.vi │ │ ├── Channel Unload.vi │ │ ├── Channel Volume.vi │ │ ├── Clear.vi │ │ ├── Controls │ │ ├── Command.ctl │ │ ├── Message.ctl │ │ └── Mixer Audio Data Type.ctl │ │ ├── Init.vi │ │ ├── Mixer.lvclass │ │ ├── Polymorphic VIs │ │ ├── Channel Load (Path).vi │ │ └── Channel Load (UTF-8).vi │ │ ├── Private │ │ ├── Channel In Range.vi │ │ ├── Channel Load (Core).vi │ │ ├── Process Messages.vi │ │ ├── Run.vi │ │ └── Start.vi │ │ ├── Read Channel Status.vi │ │ └── Read Mixed Audio Data Queue.vi ├── Private │ ├── Assert Supported Audio Type.vim │ ├── Audio Data Format To ma_format.vi │ ├── Audio Data To Interleaved Sample Data.vim │ ├── Audio Data Type Enum.ctl │ ├── Audio Device Refnum To Value.vi │ ├── Audio File Refnum To Value.vi │ ├── Check Audio Device Already Configured.vi │ ├── Copy Data.vi │ ├── DEVICE_ID_LENGTH.vi │ ├── DVR Read.vim │ ├── DVR Write.vim │ ├── Debug Path.vi │ ├── Get Audio Data Type.vim │ ├── Get Audio Device Info.vi │ ├── Get Basic Audio File Info.vi │ ├── Get Configured Audio Device ID.vi │ ├── Get Configured Audio Devices.vi │ ├── Get Configured Backend.vi │ ├── Interleaved Sample Data To Audio Data.vim │ ├── MAX_DEVICES.vi │ ├── NATIVE_DATA_FORMAT_COUNT.vi │ ├── Path To UTF-8 String.vi │ ├── Result To Error.vi │ ├── UTF-8 To UTF-16.vi │ ├── Value To Audio Device Refnum.vi │ ├── Value To Audio File Refnum.vi │ └── ma_format To Audio Data Format.vi └── lib │ ├── LINX │ └── g_audio_32.so │ ├── g_audio_32.dll │ ├── g_audio_64.dll │ ├── g_audio_64.framework.zip │ └── g_audio_64.so ├── Unit Tests ├── Resources │ ├── flac │ │ ├── 44100-16-1ch-fb2k-decoded.wav │ │ ├── 44100-16-1ch.flac │ │ ├── 44100-16-2ch-fb2k-decoded.wav │ │ └── 44100-16-2ch.flac │ ├── mp3 │ │ ├── 44100-16-1ch-CBR-320-fb2k-decoded.wav │ │ ├── 44100-16-1ch-CBR-320.mp3 │ │ ├── 44100-16-1ch-V0.mp3 │ │ ├── 44100-16-2ch-CBR-320-fb2k-decoded.wav │ │ ├── 44100-16-2ch-CBR-320-tags-apev2.mp3 │ │ ├── 44100-16-2ch-CBR-320-tags-id3v1-apev2.mp3 │ │ ├── 44100-16-2ch-CBR-320-tags-id3v1-id3v2-apev2.mp3 │ │ ├── 44100-16-2ch-CBR-320-tags-id3v1-id3v2.mp3 │ │ ├── 44100-16-2ch-CBR-320-tags-id3v1.mp3 │ │ ├── 44100-16-2ch-CBR-320-tags-id3v2-apev2.mp3 │ │ ├── 44100-16-2ch-CBR-320-tags-id3v2.mp3 │ │ ├── 44100-16-2ch-CBR-320-tags-none.mp3 │ │ └── 44100-16-2ch-CBR-320.mp3 │ ├── tags │ │ ├── apev2.mp3 │ │ ├── id3v1-apev2.mp3 │ │ ├── id3v1-id3v2-apev2.mp3 │ │ ├── id3v1-id3v2.mp3 │ │ ├── id3v1.mp3 │ │ ├── id3v2-apev2.mp3 │ │ ├── id3v2.mp3 │ │ ├── none.mp3 │ │ ├── pictures.bmp │ │ ├── pictures.flac │ │ ├── pictures.gif │ │ ├── pictures.jpg │ │ ├── pictures.mp3 │ │ ├── pictures.ogg │ │ ├── pictures.png │ │ ├── riff.wav │ │ ├── unicode-tags.flac │ │ ├── unicode-tags.mp3 │ │ ├── unicode-tags.ogg │ │ ├── vorbis.flac │ │ └── vorbis.ogg │ ├── unicode │ │ ├── utf-8.txt │ │ ├── ユニコード.flac │ │ ├── ユニコード.mp3 │ │ ├── ユニコード.ogg │ │ └── ユニコード.wav │ ├── vorbis │ │ ├── 44100-16-1ch-q10-fb2k-decoded.wav │ │ ├── 44100-16-1ch-q10.ogg │ │ ├── 44100-16-2ch-q10-fb2k-decoded.wav │ │ └── 44100-16-2ch-q10.ogg │ └── wav │ │ ├── 44100-16-1ch.wav │ │ └── 44100-16-2ch.wav ├── Test Configure Audio Device Duplicate.vi ├── Test Default Audio Device Capture.vi ├── Test Default Audio Device Playback.vi ├── Test File Info FLAC.vi ├── Test File Info MP3.vi ├── Test File Info Vorbis.vi ├── Test File Info WAV.vi ├── Test Get Audio Device Configuration.vi ├── Test Load FLAC.vi ├── Test Load MP3.vi ├── Test Load Vorbis.vi ├── Test Load WAV.vi ├── Test Minimal Audio Device Capture.vi ├── Test Minimal Audio Device Playback.vi ├── Test Open Read Close FLAC.vi ├── Test Open Read Close MP3.vi ├── Test Open Read Close Vorbis.vi ├── Test Open Read Close WAV.vi ├── Test Open Write Close WAV.vi ├── Test Query Audio Backends.vi ├── Test Seek Position FLAC.vi ├── Test Seek Position MP3.vi ├── Test Seek Position Vorbis.vi ├── Test Seek Position WAV.vi ├── Test Tag Read FLAC.vi ├── Test Tag Read ID3v1.vi ├── Test Tag Read ID3v2.vi ├── Test Tag Read Pictures FLAC.vi ├── Test Tag Read Pictures MP3.vi ├── Test Tag Read Pictures Vorbis.vi ├── Test Tag Read Vorbis.vi ├── Test Tag Read WAV.vi ├── Test Unicode Path UTF8.vi ├── Test Unicode Tag FLAC.vi ├── Test Unicode Tag ID3v2.vi ├── Test Unicode Tag Vorbis.vi └── Waveform Array In Range Comparison.vim └── VIPM ├── G-Audio.vipb ├── Generate Post-Install.vi ├── Post-Install Custom Action.vi ├── Pre-Uninstall Custom Action.vi ├── dataflow_g_lib_g_audio-0.1.0.1.vip ├── dataflow_g_lib_g_audio-0.2.0.1.vip ├── dataflow_g_lib_g_audio-0.2.1.1.vip ├── dataflow_g_lib_g_audio-0.3.0.1.vip ├── dataflow_g_lib_g_audio-0.3.1.1.vip ├── dataflow_g_lib_g_audio-0.4.0.1.vip ├── icon.pdn ├── icon.png ├── palette-icon-devices.pdn ├── palette-icon-devices.png ├── palette-icon-examples.pdn ├── palette-icon-examples.png ├── palette-icon-files.pdn ├── palette-icon-files.png ├── palette-icon-linx.pdn ├── palette-icon-linx.png ├── palette-icon-mixer.pdn ├── palette-icon-mixer.png ├── palette-icon.pdn ├── palette-icon.png ├── vipm-screenshot.png └── vipm-screenshot.svg /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | 19 | 20 | 21 | # Taken from https://github.com/Danimoth/gitattributes/blob/master/Common.gitattributes 22 | # (note binary is a macro for -text -diff) 23 | 24 | # Graphics 25 | *.png binary 26 | *.jpg binary 27 | *.jpeg binary 28 | *.gif binary 29 | *.tif binary 30 | *.tiff binary 31 | *.ico binary 32 | *.svg binary 33 | *.eps binary 34 | 35 | # LabVIEW 36 | # Forcibly treat the bitfile as binary, otherwise GitHub sees the XML header and treats it as text. 37 | *.lvbitx binary 38 | # Treat the following XML type files as binary - text based diffing and merging can break them otherwise. 39 | # See the section titled Managing the Project File in Source Code Control of this white paper: http://www.ni.com/white-paper/4114/en/ 40 | *.lvproj binary 41 | *.lvlib binary 42 | *.lvclass binary 43 | *.xctl binary 44 | *.lvsc binary 45 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # ========================= 2 | # Project Specific 3 | # ========================= 4 | Post Install 5 | 6 | # ========================= 7 | # LabVIEW Files 8 | # ========================= 9 | # Metadata 10 | *.aliases 11 | *.lvlps 12 | 13 | # Builds 14 | [Bb]uilds/ 15 | 16 | # ========================= 17 | # Operating System Files 18 | # ========================= 19 | 20 | # OSX 21 | # ========================= 22 | 23 | .DS_Store 24 | .AppleDouble 25 | .LSOverride 26 | 27 | # Thumbnails 28 | ._* 29 | 30 | # Files that might appear in the root of a volume 31 | .DocumentRevisions-V100 32 | .fseventsd 33 | .Spotlight-V100 34 | .TemporaryItems 35 | .Trashes 36 | .VolumeIcon.icns 37 | 38 | # Directories potentially created on remote AFP share 39 | .AppleDB 40 | .AppleDesktop 41 | Network Trash Folder 42 | Temporary Items 43 | .apdisk 44 | 45 | # Windows 46 | # ========================= 47 | 48 | # Windows image file caches 49 | Thumbs.db 50 | ehthumbs.db 51 | 52 | # Folder config file 53 | Desktop.ini 54 | 55 | # Recycle Bin used on file shares 56 | $RECYCLE.BIN/ 57 | 58 | # Windows shortcuts 59 | *.lnk 60 | -------------------------------------------------------------------------------- /BUILDING.md: -------------------------------------------------------------------------------- 1 | # Building and Packaging G-Audio 2 | 3 | ## Development Environment 4 | 5 | The OS and software version selection is dependent on the versions supported by LabVIEW 2020, which is the LabVIEW version used to develop G-Audio. All development is done in virtual machines, except for Raspberry Pi which is on a physical Raspberry Pi 3B+. 6 | 7 | OS | LV2020 Compatible Version | Link 8 | ---|---------------------------|------ 9 | Windows | Windows 8.1, 10 | [Compatibility table]( https://www.ni.com/en-us/support/documentation/compatibility/17/labview-and-microsoft-windows-compatibility.html) 10 | macOS | macOS 10.14, 10.15 | [Compatibility table]( https://www.ni.com/en-us/support/documentation/compatibility/18/labview-and-macos-compatibility.html) 11 | Linux | OpenSUSE 15.0, 15.1; CentOS 7, 8; RHEL 7, 8 | [Compatibility table]( https://www.ni.com/en-us/support/documentation/compatibility/20/labview-and-linux-os-compatibility.html) 12 | 13 | Virtualization uses VMWare Player 16 patched with [Auto-Unlocker](https://github.com/paolo-projects/auto-unlocker/releases). 14 | 15 | ### Windows 10 VM 16 | 17 | This is the primary dev environment. 18 | 19 | Software | Links | Notes 20 | ---------|-------|------ 21 | LabVIEW 2020 Community edition for Windows (32-bit) | [Download](https://www.ni.com/en-us/support/downloads/software-products/download.labview.html#343639) | 22 | Visual Studio 2019 Community edition | [Download](https://visualstudio.microsoft.com/vs/older-downloads/#visual-studio-2019-and-other-products) | 23 | VIPM 2020.3 (build 2540) | [Download](https://www.vipm.io/desktop/installer/vipm-20.3.2540-windows-setup.exe/) | Don't use 2021, it has a build bug when parsing a VI in the LINX toolkit. 24 | 25 | ### macOS 10.14 VM 26 | 27 | macOS ISO available on [archive.org](https://archive.org/details/macos-collection). 28 | 29 | Software | Links | Notes 30 | --------------|-------|------- 31 | LabVIEW 2020 SP1 Community edition for macOS (64-bit) | [Download](https://www.ni.com/en-us/support/downloads/software-products/download.labview.html#370210) | 32 | Xcode 11.3.1 | [Download](https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_11.3.1/Xcode_11.3.1.xip) | A comprehensive list of Xcode versions can be found on [xcodereleases.com](https://xcodereleases.com/) 33 | VIPM 2020.3 (build 2540) | [Download](https://www.vipm.io/desktop/installer/vipm-20.3.2540-mac.zip/) | 34 | 35 | ### CentOS 8 VM 36 | 37 | CentOS 8 is no longer supported by the maintainers, but is supported by LabVIEW 2020. After installing it, run the following commands to ensure the `yum` package manager can see the correct repos. 38 | 39 | ``` 40 | cd /etc/yum.repos.d/ 41 | sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* 42 | sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* 43 | ``` 44 | 45 | Software | Links | Notes 46 | --------------|-------|------- 47 | LabVIEW 2020 SP1 Community edition for Linux (64-bit) | [Download](https://www.ni.com/en-us/support/downloads/software-products/download.labview.html#370209) | The community edition ISO includes the pro LabVIEW version, no activation required. It isn't installed by the install script, but can be installed manually. 48 | VIPM 2017.0 (build 2018) | [Download](https://www.vipm.io/desktop/installer/vipm-17.0.2018-linux.tar.gz/) | See below for installation notes. 49 | 50 | #### Running VIPM on Linux 51 | 52 | This was surprisingly hard. The Linux dev environment was originally OpenSUSE. After a series of issues getting VIPM to successfully launch, it then simply would not connect to LabVIEW. The OS was then changed to CentOS 8 which works with VIPM thanks to the help of [James McNally's post](https://forums.vipm.io/topic/2988-vipm-2017-on-centos-8/) on the VIPM forum. 53 | 54 | 1. Install support for the 32 bit LabVIEW RTE on 64 bit by running the following: 55 | 56 | ``` 57 | su 58 | yum update libstdc++ 59 | yum install glibc.i686 libstdc++.i686 libXinerama.i686 libGL.so.1 60 | ``` 61 | 62 | 2. Extract the VIPM tar.gz file, then edit `LabVIEW2015SP1RTE_Linux/INSTALL`. Find the line which begins with *RPMOPT* and add `--nodigest` at the end of the string. Save and close the file. 63 | 64 | 3. Follow the installation instructions in `instructions.txt` in the root of the VIPM archive. 65 | 66 | 4. To run VIPM, run the commands: 67 | 68 | ``` 69 | xhost si:localuser:root 70 | su 71 | cd /usr/local/JKI/VIPM 72 | ./vipm 73 | ``` 74 | 75 | VIPM should successfully launch, but may not be able to start LabVIEW 2020 Community edition, instead prompting with the activation dialog. This is due to LabVIEW only being activated under the user account, and not the root account which VIPM is required to run under. Attempting to activate LabVIEW under the root account then fails, as Firefox refuses to run as root user. 76 | 77 | The workaround is to extract the LabVIEW pro / full rpm file from the ISO. 78 | 79 | ``` 80 | sudo rpm -i labview-2020-profull-exe-20.5.0.49152-0+f0.x86_64.rpm 81 | ``` 82 | 83 | ### Raspberry Pi 84 | 85 | Software | Links | Notes 86 | ---------|-------|------ 87 | Raspberry Pi OS | [Download](https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os-32-bit) | Desktop or Lite version 88 | LINX library | [Download](https://www.vipm.io/package/ni_labview_linx_toolkit/) | This is already included with the community editions of LabVIEW. Use the *Tools > MakerHub > LINX > LINX Target Configuration...* wizard to install LINX to the Raspberry Pi. 89 | ALSA and build packages | | See instructions below. 90 | 91 | #### Package installation 92 | 93 | SSH to the Raspberry Pi after installing the LINX environment, then enter the following commands to install the packages required for playing audio and building the G-Audio library. 94 | 95 | ``` 96 | sudo schroot -r -c lv 97 | opkg update 98 | opkg install alsa-lib 99 | opkg install packagegroup-core-buildessential 100 | opkg install --force-depends libc6-dev 101 | opkg install --force-depends libgcc-s-dev 102 | opkg install libstdc++-staticdev 103 | opkg install git 104 | opkg install alsa-lib-dev 105 | exit 106 | ``` 107 | 108 | ## Building the Shared Library 109 | 110 | ### Windows 111 | 112 | Open the solution located at `src\C++\g_audio.sln`, then perform a batch build of both 32-bit and 64-bit releases. The resulting `g_audio_32.dll` and `g_audio_64.dll` files will be copied to `src\LabVIEW\G-Audio\lib\`. 113 | 114 | ### macOS 115 | 116 | Open the Xcode project file location at `src/C++/xcode/g_audio_64.xcodeproj`. Build the library (hit build and run, or command+B). The resulting `g_audio_64.framework` library will be copied to `src/LabVIEW/G-Audio/lib/` with the following script: 117 | 118 | ``` 119 | cd $BUILT_PRODUCTS_DIR 120 | rm -f g_audio_64.framework.zip 121 | zip --symlinks -r g_audio_64.framework.zip g_audio_64.framework 122 | cp -R g_audio_64.framework $PROJECT_DIR/../../LabVIEW/G-Audio/lib/ 123 | mv g_audio_64.framework.zip $PROJECT_DIR/../../LabVIEW/G-Audio/lib/ 124 | ``` 125 | 126 | Note a zip file of the framework will also be created, reserving the symlinks within the framework folder. This zip file is included as part of the VIPM package, and is extracted during the VIPM package post installation. 127 | 128 | ### Linux 129 | 130 | Change directory to `src/C++`, then run `chmod 755 make.sh; ./make.sh`. The resulting `g_audio_64.so` file will be copied to `src/LabVIEW/G-Audio/lib/`. The contents of make.sh are below: 131 | 132 | ``` 133 | #!/bin/bash 134 | OUTPUT_PATH=../LabVIEW/G-Audio/lib 135 | 136 | mkdir -p $OUTPUT_PATH 137 | g++ -shared -fPIC -o g_audio_64.so *.cpp -lm -lpthread -ldl -O3 138 | mv g_audio_64.so $OUTPUT_PATH 139 | ``` 140 | 141 | ### Raspberry Pi 142 | 143 | Ensure the Raspberry Pi has the necessary packages installed (alsa-lib, etc). SSH to the Pi, then issue the following commands to download the source code and build it. 144 | 145 | ``` 146 | sudo schroot -r -c lv 147 | git clone https://github.com/dataflowg/g-audio 148 | cd g-audio/src/C++ 149 | chmod 755 make_linx.sh 150 | ./make_linx.sh 151 | exit 152 | ``` 153 | 154 | The resulting `g_audio_32.so` library will be placed in `/usr/lib` within the chroot (`/srv/chroot/labview/usr/lib`). This file should then be copied from the Pi and placed in `src\LabVIEW\G-Audio\lib\LINX` on the dev VM. 155 | 156 | The contents of `make_linx.sh` are below: 157 | 158 | ``` 159 | #!/bin/bash 160 | OUTPUT_PATH=/usr/lib 161 | 162 | g++ -shared -fPIC -o g_audio_32.so *.cpp -lm -lpthread -ldl -std=c++11 -mfpu=neon -mfloat-abi=softfp -O3 163 | mv g_audio_32.so $OUTPUT_PATH 164 | ``` 165 | 166 | ## Packaging For VIPM 167 | 168 | The packaging process for VIPM requires multiple steps to deal with issues relating to the combination of operating system targets and malleable VIs. 169 | 170 | 1. Open the VIPM build spec from `src\LabVIEW\VIPM\G-Audio.vipb` 171 | 2. Set the version number, then create the build. 172 | 3. Once the build has completed, open and run `src\LabVIEW\VIPM\Generate Post-Install.vi`. Point it to the newly created `.vip` file. This VI will then create a zip file in `src\LabVIEW\Post Install` containing the original versions of all the VIs and VIMs found in the VIPM package. 173 | 4. With the G-Audio build spec still open in VIPM, refresh the file list in Source File Settings. Set the version number back to the previously set value then build the package again, overwriting the existing package. This second rebuild is required to include the newly created zip file of original source VIs. 174 | 175 | In theory the above could be performed using VIPM's packaging VIs, but they don't allow setting the major version to zero, while the user interface does. Once G-Audio reaches version 1.0 maybe this process can be revisited. 176 | 177 | ### Why so many steps? 178 | 179 | Each *Call Library Function Node* (CLFN) in G-Audio is configured to call a library named `g_audio_*.*`. When search for the library, LabVIEW will automatically replace the two asterisks with the target bitness (32 or 64), and the OS specific library extension (dll, framework, or so). The final set of library names is below: 180 | 181 | OS | Bitness | Library Name 182 | ---|---------|------------- 183 | Windows | 32 | g_audio_32.dll 184 | Windows | 64 | g_audio_64.dll 185 | macOS | 64 | g_audio_64.framework 186 | Linux | 64 | g_audio_64.so 187 | Raspberry Pi | 32 | g_audio_32.so 188 | 189 | When VIPM builds a package, it will replace the wildcards in the CLFN path with the host bitness and library type. When the package is installed on a target with a different bitness or OS, the VIs will be broken. See [this VIPM KB article](https://support.vipm.io/hc/en-us/articles/360053941572-VI-Package-Builder-removes-cross-platform-wildcards-from-Call-Library-Function-nodes-during-the-build-process) for more info. 190 | 191 | The suggested workaround is to include a post-install script which updates all of the CLFN paths with the original wildcards. This works for VIs and top level malleable VIs, but does not work for malleable VIs on the block diagram. These malleable VIs are saved by LabVIEW as an instance VI within the calling VI. [Additional scripting](https://forums.vipm.io/topic/2427-call-library-function-node-32-and-64-bit/?do=findComment&comment=10107) is required to recursively identify instance VIs and update the CLFN paths. This works, but is incredibly slow. 192 | 193 | Rather than trying to find and undo all of the CLFN path changes during the post-install stage, the G-Audio package includes a copy of the original, unmodified VIs along with the modified versions. After the modified versions are installed, a zip containing the original versions is extracted straight over the top of everything. Much faster and less error prone than the scripting approach. -------------------------------------------------------------------------------- /HISTORY.md: -------------------------------------------------------------------------------- 1 | # G-Audio Release History 2 | ### v0.4.0 - 2022-07-12 3 | * Raspberry Pi / LINX support 4 | * Support for reading metadata tags (ID3v2, ID3v1, Vorbis Comments, RIFF INFO) 5 | * Support for reading embedded artwork 6 | * Advanced device configuration (exclusive mode, period size, num periods) 7 | * Device volume adjustment (feature request #13) 8 | * Get the configuration settings of a configured device (compare requested config vs actual config) 9 | * Query detailed device info (default device, native sample rates, native channels, native formats) 10 | * Warn of duplicate device config 11 | * Update miniaudio (fixes #10) 12 | * Fix memory leak when using UTF-16 converted file name 13 | * [VIPM] Reduced package installation time 14 | * [VIPM] Fix install error 5000 under macOS (#15) 15 | 16 | ##### New APIs 17 | * `Get Audio File Tags.vi` 18 | * `Set Audio Device Volume.vi` 19 | * `Get Audio Device Volume.vi` 20 | * `Get Audio Device Configuration.vi` 21 | 22 | ##### API Changes 23 | * `Configure Audio Device.vi`: 24 | * Added `Audio Device Advanced Config.ctl` input 25 | * Added `Audio Device Config.ctl` and `Audio Device Advanced Config.ctl` outputs which contain the device's actual configuration, and can differ from the requested configuration 26 | * Exclusive Mode flag moved from `Audio Device Config.ctl` to `Audio Device Advanced Config.ctl` 27 | * `Query Audio Devices.vi` returns additional device info (default device, native sample rates, native channels, native formats) 28 | 29 | 30 | 31 | ### v0.3.1 - 2021-12-17 32 | * Fix broken example VIs when VIPM package installed to LabVIEW 64-bit (issue #12) 33 | 34 | 35 | 36 | ### v0.3.0 - 2021-11-09 37 | * Multi-channel audio mixer 38 | * Loopback audio capture (WASAPI only) 39 | * Sample pad & music visualizer examples 40 | * Fix malleable VI broken wires (issue #4) 41 | * Fix mp3 info memory error (issue #8) 42 | * Upmix / downmix audio data to match audio device (issue #9) 43 | * Auto cleanup audio devices on VI abort 44 | 45 | 46 | 47 | ### v0.2.1 - 2021-09-23 48 | * Added `Get Audio File Position.vi` (issue #2) 49 | * Codec detection based on file signature (issue #3) 50 | * UTF-8 strings can be used as the path when opening files 51 | * LabVIEW's unicode support treats strings as UTF-16 LE, so will require a conversion 52 | * Automatically start audio device during playback and capture (issue #7) 53 | * Fix misc. malleable VI issues (issue #4, #6) 54 | 55 | ##### API Changes 56 | * Removed *Codec* input from `Open Audio File Read.vi`, `Quick Load Audio File.vi`, `Get Audio File Info.vi` 57 | * `Open Audio File Read.vi`, `Quick Load Audio File.vi`, `Get Audio File Info.vi` are now polymorphic, accepting path type or string type as the Path input to support UTF-8 string paths 58 | 59 | 60 | 61 | ### v0.2.0 - 2021-09-05 62 | * Playback and capture 63 | 64 | 65 | 66 | ### v0.1.0 - 2021-07-16 67 | * Initial release -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # G-Audio 2 |

3 | 4 |

5 |

6 | A cross-platform LabVIEW library for audio device playback and capture, and for reading and writing audio files. 7 |

8 |

9 | 10 |

11 | 12 |

13 | What's New? - 14 | Features - 15 | Installation - 16 | Usage - 17 | Building - 18 | Comparison - 19 | License - 20 | Acknowledgments 21 |

22 | 23 | ## What's New? 24 | * Raspberry Pi / LINX support! 25 | * See the [Installation](#installation) section to get started. 26 | * Support for reading metadata tags (ID3v2, ID3v1, Vorbis Comments, RIFF INFO) 27 | * Support for reading embedded artwork 28 | * Advanced device configuration options 29 | * Misc. bug fixes 30 | 31 | ## Features 32 | * Support for audio playback and capture, including loopback capture 33 | * Playback and capture using selectable backends (WASAPI, DirectSound, Core Audio, PulseAudio, ALSA, etc) 34 | * Multi-channel audio mixer 35 | * Read MP3, FLAC, Ogg Vorbis, and WAV formats 36 | * Read metadata tags (ID3v2, ID3v1, Vorbis Comments, RIFF INFO) and embedded artwork 37 | * Write WAV format (PCM and IEEE Float, with Sony Wave64 support for large files) 38 | * Unicode path support (UTF-8) and unicode tag support 39 | * Cross-platform (Windows, macOS, Linux, Raspberry Pi / LINX), 32-bit and 64-bit 40 | * Simple to use API 41 | 42 | ![The G-Audio library API](images/g-audio-palettes.png?raw=true "The G-Audio library API") 43 | 44 | ## Installation 45 | G-Audio is published on [vipm.io](https://www.vipm.io/package/dataflow_g_lib_g_audio/), and can be installed using VI Package Manager (VIPM). The packages are also available as [github releases](https://github.com/dataflowg/g-audio/releases) and can be installed manually using VIPM. 46 | 47 | * **[macOS and Linux]** It's recommended to restart LabVIEW after installing the package via VIPM. 48 | * **[macOS 10.14 and newer]** LabVIEW will require permission to access recording devices when performing audio capture. Make sure to enable this in the Security & Privacy settings. See [instructions here](https://support.apple.com/guide/mac-help/control-access-to-the-microphone-on-mac-mchla1b1e1fe/mac) on how to enable this setting. 49 | 50 | If you want to include the library directly in your project, download or clone the repo and place the [G-Audio folder](https://github.com/dataflowg/g-audio/tree/main/src/LabVIEW/G-Audio) in your source directory, then add `G-Audio.lvlib` to your LabVIEW project. 51 | 52 | * **[macOS]** Before adding the library to the project, extract `g_audio_64.framework.zip` located in `src/LabVIEW/G-Audio/lib/`. 53 | 54 | ### Raspberry Pi / LINX Installation 55 | Before beginning, ensure your board has the LINX toolkit installed and SSH is enabled, and G-Audio has been installed on the host computer. 56 | 57 | #### 1. Install ALSA to chroot 58 | SSH into the LINX target (using PuTTy or similar) and run the commands: 59 | ``` 60 | sudo schroot -r -c lv 61 | opkg update 62 | opkg install alsa-lib 63 | exit 64 | ``` 65 | #### 2. Copy `g_audio_32.so` to the target 66 | *Note: This library has been compiled for armv7a processors. Other architectures may need to build the library before it can be used. See the [Building](#building) section.* 67 | 68 | SCP / SFTP to the LINX target (using WinSCP or similar) and copy the library file located in `\Dataflow_G\G-Audio\lib\LINX\g_audio_32.so` to the `/srv/chroot/labview/usr/lib` folder. 69 | 70 | Alternatively, SSH to the LINX target and download the library direct from github: 71 | ``` 72 | cd /srv/chroot/labview/usr/lib 73 | wget https://github.com/dataflowg/g-audio/raw/main/src/LabVIEW/G-Audio/lib/LINX/g_audio_32.so 74 | ``` 75 | 76 | #### 3. Make some noise! 77 | Copy some audio files to your device using SCP or SFTP and place them in `/home/pi` or your preferred location. Create a LabVIEW project, add your LINX target, then the examples in the Add-ons >> G-Audio >> Examples >> LINX palette. 78 | 79 | If you need to adjust the volume output, SSH into the LINX target and run `alsamixer`. Press F6, then select the physical audio device (not Default). Use the up and down arrow keys to adjust the volume, or use numbers 1-9 to set the volume in 10% increments. Press Esc to save and exit the mixer. 80 | 81 | ## Usage 82 | See the example VIs in [Examples](src/LabVIEW/G-Audio/Examples) to write, read, playback, and capture audio files. 83 | 84 | Unit tests are included and can be run individually, or with the [AST Unit Tester](https://www.autosofttech.net/documents/ast-unit-tester). 85 | 86 | * **[macOS 10.14 and newer]** LabVIEW will require permission to access recording devices when performing audio capture. Make sure to enable this in the Security & Privacy settings. See [instructions here](https://support.apple.com/guide/mac-help/control-access-to-the-microphone-on-mac-mchla1b1e1fe/mac) on how to enable this setting. 87 | 88 | ### Supported Data Types 89 | The `Playback Audio`, `Capture Audio`, `Audio File Read`, and `Audio File Write` VIs are malleable, and accept waveform arrays, waveforms, 2D arrays, and 1D arrays with types U8, I16, I32, SGL, and DBL (20 combinations in total). All audio data is processed in its native format, and then converted to the requested format if necessary. For WAV and FLAC files, any conversions are considered lossy, so check the file format before loading to ensure everything is lossless. 90 | 91 | ![Supported data types](images/g-audio-data-types.png?raw=true "Supported data types") 92 | 93 | #### Malleable VIs and broken wires 94 | If a malleable VI has broken wire inputs and errors about unsupported types, even though the type is supported, try hold Ctrl and click the run arrow. This will force LabVIEW to recompile the VI, and should hopefully fix those broken wires. 95 | 96 | ### Supported Metadata Tags 97 | G-Audio supports reading ID3v2 and ID3v1 tags from MP3 files, Vorbis Comments from FLAC and Ogg Vorbis files, and RIFF INFO data from WAV files. All tag data is returned as an array of `Field` \ `Value` clusters from `Read Audio File Tags.vi`. The text encoding of `Value` can be specified to support tags containing unicode (note the `Field` text is always ASCII). Depending on the tag format, `Field` is named based on the tag (in the case of Vorbis Comments and ID3v2 `TXXX` fields), or mapped to a commonly named field. The table below shows the mapping between a common Field name and various tags. 98 | 99 | Field | Description | ID3v2 | ID3v1 | RIFF INFO 100 | ------------|-----------------------------------------|-----------------------------|---------------|----------- 101 | TITLE | The title of the track. | `TIT2`, `TT2` | Title | `INAM` 102 | ARTIST | The track artist. | `TPE1`, `TP1` | Artist | `IART` 103 | ALBUM | The album title. | `TALB`, `TAL` | Album | `IPRD` 104 | ALBUMARTIST | The album artist. | `TPE2`, `TP2` | :x: | :x: 105 | GENRE | The track's genre. | `TCON`, `TCO` | Genre ID | `IGNR` 106 | DATE | The release date, typically the year. | `TYER`, `TYE` | Year | `ICRD` 107 | TRACKNUMBER | The track's number in an album. | `TRCK`, `TRK` (**nn** / NN) | Comment[29] | `ITRK` 108 | TRACKTOTAL | The total number of tracks in an album. | `TRCK`, `TRK` (nn / **NN**) | :x: | :x: 109 | DISCNUMBER | The disc number within an album. | `TPOS`, `TPA` (**nn** / NN) | :x: | :x: 110 | DISCTOTAL | The total number of discs in an album. | `TPOS`, `TPA` (nn / **NN**) | :x: | :x: 111 | BPM | Beats Per Minute of the track. | `TBPM`, `TBP` | :x: | :x: 112 | COMMENT | Notes and comments on the track. | `COMM`, `COM` | Comment[0-27] | `ICMT` 113 | 114 | The field / tag mapping is based on the [Tag Mapping article](https://wiki.hydrogenaud.io/index.php?title=Tag_Mapping) on the hydrogenaudio wiki. 115 | 116 | ## Building 117 | Detailed build instructions can be found in [BUILDING.md](BUILDING.md), and covers development environment configuration, compilation details for each target, and VIPM packaging process. 118 | 119 | Under Windows, Microsoft Visual Studio Community 2019 is used to compile and test the DLL called by LabVIEW. 120 | 121 | Under macOS, Xcode 11.3.1 is used to compile the shared framework. 122 | 123 | Under Linux, run the `make.sh` script to compile the shared object library, or manually compile with the command `g++ -shared -fPIC -o g_audio_64.so *.cpp -lm -lpthread -ldl -O3`. 124 | 125 | Under Raspberry Pi / LINX, run the following commands from SSH: 126 | ``` 127 | sudo schroot -r -c lv 128 | opkg update 129 | opkg install packagegroup-core-buildessential 130 | opkg install --force-depends libc6-dev 131 | opkg install --force-depends libgcc-s-dev 132 | opkg install libstdc++-staticdev 133 | opkg install git 134 | opkg install alsa-lib-dev 135 | git clone https://github.com/dataflowg/g-audio 136 | cd g-audio/src/C++ 137 | g++ -shared -fPIC -o g_audio_32.so *.cpp -lm -lpthread -ldl -std=c++11 -mfpu=neon -mfloat-abi=softfp -O3 138 | cp g_audio_32.so /usr/lib 139 | exit 140 | ``` 141 | 142 | ## Comparison 143 | ### Audio Playback & Capture 144 | Feature | G-Audio | [LabVIEW Sound](https://zone.ni.com/reference/en-XX/help/371361R-01/lvconcepts/soundvis/) | [WaveIO](https://www.zeitnitz.eu/scms/waveio) 145 | ------------------------------|---------------------|-------------------------|-------------- 146 | Selectable backend | :heavy_check_mark: | :x: | :heavy_check_mark: (WASAPI, WinMM, ASIO) 147 | Cross-platform | :heavy_check_mark: | :heavy_check_mark:¹ | :x: (Windows only) 148 | Runtime device enumeration | :heavy_check_mark: | :x:² | :heavy_check_mark: 149 | Audio device playback | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: 150 | Audio device capture | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: 151 | 152 | ¹ *The backend for Linux is OSS, which was deprecated in Linux kernel version 2.5 in favor of ALSA. OSS support is not included out-of-the-box by any of the Linux distributions supported by LabVIEW 2020.* 153 | 154 | ² *LabVIEW Sound only enumerates devices when lvsound2.dll is loaded, and can't detect newly added or removed devices unless the entire library is unloaded and loaded again. See [this idea exchange entry](https://forums.ni.com/t5/LabVIEW-Idea-Exchange/Update-the-lvsound2-library-Sound-Input-Sound-Output-VIs-to/idi-p/2049098?profile.language=en) for details.* 155 | 156 | ### Audio Files 157 | Feature | G-Audio | [LabVIEW Sound](https://zone.ni.com/reference/en-XX/help/371361R-01/lvconcepts/soundvis/) | [LabVIEW Audio DataPlugin](https://www.ni.com/example/25044/en/) 158 | -----------------------------|---------------------|---------------------|------------------------- 159 | Read WAV (PCM) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: 160 | Read WAV (IEEE Float) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: 161 | Read MP3 | :heavy_check_mark: | :x: | :heavy_check_mark: 162 | Sample Accurate MP3 Length? | :heavy_check_mark: | - | :x: 163 | Read FLAC | :heavy_check_mark: | :x: | :x: 164 | Read Ogg Vorbis | :heavy_check_mark: | :x: | :x: 165 | Read WMA | :x: | :x: | :heavy_check_mark: 166 | Read metadata tags | :heavy_check_mark: | :x: | :x: 167 | Read embedded artwork | :heavy_check_mark: | :x: | :x: 168 | Write WAV (PCM) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: 169 | Write WAV (IEEE Float) | :heavy_check_mark: | :heavy_check_mark:¹ | :heavy_check_mark:¹ 170 | Write WAV (64-bit Float) | :heavy_check_mark: | :x: | :x: 171 | Write Non-WAV formats | :x: | :x: | :x: 172 | Large file support (>2GB) | :heavy_check_mark:² | :x: | :x: 173 | Unicode paths | :heavy_check_mark:³ | :x: | :x: 174 | Cross-platform | :heavy_check_mark: | :heavy_check_mark:⁴ | :x: (Windows only) 175 | 176 | ¹ *While LabVIEW Sound and LabVIEW Audio DataPlugin both support writing IEEE Float WAV files, writing the file and then reading it back shows they are **not** lossless. Both the read and write functions appear to be lossy (a file written by LV Sound and read with G-Audio will not be equal to the original data, as will a file written by G-Audio and read by LV Sound). dr_wav's (and by extension, G-Audio's) IEEE Float WAV write and read functions are lossless.* 177 | 178 | ² *64-bit version of LabVIEW required.* 179 | 180 | ³ *The path must be a UTF-8 encoded string (not path type) when passed to the Path input of the audio file functions. LabVIEW's file dialog and path controls don't support unicode, so getting the UTF-8 path into LabVIEW will require additional effort. String controls do support unicode with the `UseUnicode=TRUE` flag in **labview.ini** but are encoded as UTF-16 LE, so will require conversion to UTF-8 before use with G-Audio.* 181 | 182 | ⁴ *While LabVIEW Sound is cross-platform, testing under macOS and Linux shows writing 32-bit IEEE Float is unsupported.* 183 | 184 | ## Playback and Capture Buffering 185 | The underlying mechanism for playback and capture is a callback made from the backend, where it requests the next block of audio data to be sent to the audio device, or the next available block read from the audio device. 186 | 187 | The diagram below shows the audio data flow during playback. The function `Playback Audio.vim` and the backend callback run asynchronously. The ring buffer sits between the two, and keeps track of the next block of audio to be read (by the callback) and written (from LabVIEW). It's critical sufficient audio data is written to the ring buffer during playback, and read from the buffer during capture, to ensure there are no audio glitches. 188 | 189 | Definitions used when referring to the diagram: 190 | 191 | Term | Definition 192 | -------|-------- 193 | Sample | Single unit of audio data, typically an I16 or SGL 194 | Frame | Group of samples equal to number of channels 195 | Period | 10ms of audio data (sample rate / 100). Typically 441 or 480 frames. 196 | 197 | ![The G-Audio library API](images/playback.png?raw=true "The G-Audio library API") 198 | 199 | The *period* size should be regarded as the minimum buffer size when configuring the audio device. Note that the number of frames requested in the callback routine isn't necessarily fixed, and can be larger than a single *period*. 200 | 201 | ## License 202 | This library is built using public domain audio decoders and libraries. As such, this library is also made available in the public domain. See [LICENSE](LICENSE) for details. 203 | 204 | ## Acknowledgments 205 | This library uses the following public domain libraries. Massive thanks to these authors. 206 | 207 | Library | Author | Public Domain License 208 | --------|--------|---------------------- 209 | [miniaudio](https://github.com/mackron/miniaudio) | David Reid | [Unlicense / MIT0](https://github.com/mackron/miniaudio/blob/master/LICENSE) 210 | [dr_flac.h](https://github.com/mackron/dr_libs) | David Reid | [Unlicense / MIT0](https://github.com/mackron/dr_libs/blob/master/LICENSE) 211 | [dr_wav.h](https://github.com/mackron/dr_libs) | David Reid | [Unlicense / MIT0](https://github.com/mackron/dr_libs/blob/master/LICENSE) 212 | [minimp3](https://github.com/lieff/minimp3) | lieff | [CC0](https://github.com/lieff/minimp3/blob/master/LICENSE) 213 | [stb_image.h](https://github.com/nothings/stb) | Sean Barrett | [Unlicense / MIT](https://github.com/nothings/stb/blob/master/LICENSE) 214 | [stb_vorbis.c](https://github.com/nothings/stb) | Sean Barrett | [Unlicense / MIT](https://github.com/nothings/stb/blob/master/LICENSE) 215 | [id3tag.h](https://github.com/mattiasgustavsson/i-love-music/tree/main/source/libs) | Mattias Gustavsson | [Unlicense / MIT](https://github.com/mattiasgustavsson/i-love-music/blob/main/LICENSE) 216 | [thread.h](https://github.com/mattiasgustavsson/libs) | Mattias Gustavsson | [Unlicense / MIT](https://github.com/mattiasgustavsson/libs/blob/main/thread.h) 217 | [base64](https://github.com/badzong/base64) | Manuel Badzong | [Unlicense](https://github.com/badzong/base64/blob/master/LICENSE) 218 | -------------------------------------------------------------------------------- /images/g-audio-data-types.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/images/g-audio-data-types.png -------------------------------------------------------------------------------- /images/g-audio-library.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/images/g-audio-library.png -------------------------------------------------------------------------------- /images/g-audio-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/images/g-audio-logo.png -------------------------------------------------------------------------------- /images/g-audio-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 20 | 22 | 42 | 44 | 45 | 47 | image/svg+xml 48 | 50 | 51 | 52 | 53 | 54 | 58 | 61 | 70 | 73 | G 84 | -Audio 95 | 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /images/g-audio-palettes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/images/g-audio-palettes.png -------------------------------------------------------------------------------- /images/ieee-float-compare-snippet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/images/ieee-float-compare-snippet.png -------------------------------------------------------------------------------- /images/playback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/images/playback.png -------------------------------------------------------------------------------- /src/C++/.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Aa][Rr][Mm]/ 27 | [Aa][Rr][Mm]64/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Ll]og/ 32 | 33 | # Visual Studio 2015/2017 cache/options directory 34 | .vs/ 35 | # Uncomment if you have tasks that create the project's static files in wwwroot 36 | #wwwroot/ 37 | 38 | # Visual Studio 2017 auto generated files 39 | Generated\ Files/ 40 | 41 | # MSTest test Results 42 | [Tt]est[Rr]esult*/ 43 | [Bb]uild[Ll]og.* 44 | 45 | # NUnit 46 | *.VisualState.xml 47 | TestResult.xml 48 | nunit-*.xml 49 | 50 | # Build Results of an ATL Project 51 | [Dd]ebugPS/ 52 | [Rr]eleasePS/ 53 | dlldata.c 54 | 55 | # Benchmark Results 56 | BenchmarkDotNet.Artifacts/ 57 | 58 | # .NET Core 59 | project.lock.json 60 | project.fragment.lock.json 61 | artifacts/ 62 | 63 | # StyleCop 64 | StyleCopReport.xml 65 | 66 | # Files built by Visual Studio 67 | *_i.c 68 | *_p.c 69 | *_h.h 70 | *.ilk 71 | *.meta 72 | *.obj 73 | *.iobj 74 | *.pch 75 | *.pdb 76 | *.ipdb 77 | *.pgc 78 | *.pgd 79 | *.rsp 80 | *.sbr 81 | *.tlb 82 | *.tli 83 | *.tlh 84 | *.tmp 85 | *.tmp_proj 86 | *_wpftmp.csproj 87 | *.log 88 | *.vspscc 89 | *.vssscc 90 | .builds 91 | *.pidb 92 | *.svclog 93 | *.scc 94 | 95 | # Chutzpah Test files 96 | _Chutzpah* 97 | 98 | # Visual C++ cache files 99 | ipch/ 100 | *.aps 101 | *.ncb 102 | *.opendb 103 | *.opensdf 104 | *.sdf 105 | *.cachefile 106 | *.VC.db 107 | *.VC.VC.opendb 108 | 109 | # Visual Studio profiler 110 | *.psess 111 | *.vsp 112 | *.vspx 113 | *.sap 114 | 115 | # Visual Studio Trace Files 116 | *.e2e 117 | 118 | # TFS 2012 Local Workspace 119 | $tf/ 120 | 121 | # Guidance Automation Toolkit 122 | *.gpState 123 | 124 | # ReSharper is a .NET coding add-in 125 | _ReSharper*/ 126 | *.[Rr]e[Ss]harper 127 | *.DotSettings.user 128 | 129 | # JustCode is a .NET coding add-in 130 | .JustCode 131 | 132 | # TeamCity is a build add-in 133 | _TeamCity* 134 | 135 | # DotCover is a Code Coverage Tool 136 | *.dotCover 137 | 138 | # AxoCover is a Code Coverage Tool 139 | .axoCover/* 140 | !.axoCover/settings.json 141 | 142 | # Visual Studio code coverage results 143 | *.coverage 144 | *.coveragexml 145 | 146 | # NCrunch 147 | _NCrunch_* 148 | .*crunch*.local.xml 149 | nCrunchTemp_* 150 | 151 | # MightyMoose 152 | *.mm.* 153 | AutoTest.Net/ 154 | 155 | # Web workbench (sass) 156 | .sass-cache/ 157 | 158 | # Installshield output folder 159 | [Ee]xpress/ 160 | 161 | # DocProject is a documentation generator add-in 162 | DocProject/buildhelp/ 163 | DocProject/Help/*.HxT 164 | DocProject/Help/*.HxC 165 | DocProject/Help/*.hhc 166 | DocProject/Help/*.hhk 167 | DocProject/Help/*.hhp 168 | DocProject/Help/Html2 169 | DocProject/Help/html 170 | 171 | # Click-Once directory 172 | publish/ 173 | 174 | # Publish Web Output 175 | *.[Pp]ublish.xml 176 | *.azurePubxml 177 | # Note: Comment the next line if you want to checkin your web deploy settings, 178 | # but database connection strings (with potential passwords) will be unencrypted 179 | *.pubxml 180 | *.publishproj 181 | 182 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 183 | # checkin your Azure Web App publish settings, but sensitive information contained 184 | # in these scripts will be unencrypted 185 | PublishScripts/ 186 | 187 | # NuGet Packages 188 | *.nupkg 189 | # NuGet Symbol Packages 190 | *.snupkg 191 | # The packages folder can be ignored because of Package Restore 192 | **/[Pp]ackages/* 193 | # except build/, which is used as an MSBuild target. 194 | !**/[Pp]ackages/build/ 195 | # Uncomment if necessary however generally it will be regenerated when needed 196 | #!**/[Pp]ackages/repositories.config 197 | # NuGet v3's project.json files produces more ignorable files 198 | *.nuget.props 199 | *.nuget.targets 200 | 201 | # Microsoft Azure Build Output 202 | csx/ 203 | *.build.csdef 204 | 205 | # Microsoft Azure Emulator 206 | ecf/ 207 | rcf/ 208 | 209 | # Windows Store app package directories and files 210 | AppPackages/ 211 | BundleArtifacts/ 212 | Package.StoreAssociation.xml 213 | _pkginfo.txt 214 | *.appx 215 | *.appxbundle 216 | *.appxupload 217 | 218 | # Visual Studio cache files 219 | # files ending in .cache can be ignored 220 | *.[Cc]ache 221 | # but keep track of directories ending in .cache 222 | !?*.[Cc]ache/ 223 | 224 | # Others 225 | ClientBin/ 226 | ~$* 227 | *~ 228 | *.dbmdl 229 | *.dbproj.schemaview 230 | *.jfm 231 | *.pfx 232 | *.publishsettings 233 | orleans.codegen.cs 234 | 235 | # Including strong name files can present a security risk 236 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 237 | #*.snk 238 | 239 | # Since there are multiple workflows, uncomment next line to ignore bower_components 240 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 241 | #bower_components/ 242 | 243 | # RIA/Silverlight projects 244 | Generated_Code/ 245 | 246 | # Backup & report files from converting an old project file 247 | # to a newer Visual Studio version. Backup files are not needed, 248 | # because we have git ;-) 249 | _UpgradeReport_Files/ 250 | Backup*/ 251 | UpgradeLog*.XML 252 | UpgradeLog*.htm 253 | ServiceFabricBackup/ 254 | *.rptproj.bak 255 | 256 | # SQL Server files 257 | *.mdf 258 | *.ldf 259 | *.ndf 260 | 261 | # Business Intelligence projects 262 | *.rdl.data 263 | *.bim.layout 264 | *.bim_*.settings 265 | *.rptproj.rsuser 266 | *- [Bb]ackup.rdl 267 | *- [Bb]ackup ([0-9]).rdl 268 | *- [Bb]ackup ([0-9][0-9]).rdl 269 | 270 | # Microsoft Fakes 271 | FakesAssemblies/ 272 | 273 | # GhostDoc plugin setting file 274 | *.GhostDoc.xml 275 | 276 | # Node.js Tools for Visual Studio 277 | .ntvs_analysis.dat 278 | node_modules/ 279 | 280 | # Visual Studio 6 build log 281 | *.plg 282 | 283 | # Visual Studio 6 workspace options file 284 | *.opt 285 | 286 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 287 | *.vbw 288 | 289 | # Visual Studio LightSwitch build output 290 | **/*.HTMLClient/GeneratedArtifacts 291 | **/*.DesktopClient/GeneratedArtifacts 292 | **/*.DesktopClient/ModelManifest.xml 293 | **/*.Server/GeneratedArtifacts 294 | **/*.Server/ModelManifest.xml 295 | _Pvt_Extensions 296 | 297 | # Paket dependency manager 298 | .paket/paket.exe 299 | paket-files/ 300 | 301 | # FAKE - F# Make 302 | .fake/ 303 | 304 | # CodeRush personal settings 305 | .cr/personal 306 | 307 | # Python Tools for Visual Studio (PTVS) 308 | __pycache__/ 309 | *.pyc 310 | 311 | # Cake - Uncomment if you are using it 312 | # tools/** 313 | # !tools/packages.config 314 | 315 | # Tabs Studio 316 | *.tss 317 | 318 | # Telerik's JustMock configuration file 319 | *.jmconfig 320 | 321 | # BizTalk build output 322 | *.btp.cs 323 | *.btm.cs 324 | *.odx.cs 325 | *.xsd.cs 326 | 327 | # OpenCover UI analysis results 328 | OpenCover/ 329 | 330 | # Azure Stream Analytics local run output 331 | ASALocalRun/ 332 | 333 | # MSBuild Binary and Structured Log 334 | *.binlog 335 | 336 | # NVidia Nsight GPU debugger configuration file 337 | *.nvuser 338 | 339 | # MFractors (Xamarin productivity tool) working folder 340 | .mfractor/ 341 | 342 | # Local History for Visual Studio 343 | .localhistory/ 344 | 345 | # BeatPulse healthcheck temp database 346 | healthchecksdb 347 | 348 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 349 | MigrationBackup/ 350 | 351 | # zig tool 352 | zig/ 353 | zig-cache/ -------------------------------------------------------------------------------- /src/C++/ReadMe.txt: -------------------------------------------------------------------------------- 1 | ======================================================================== 2 | DYNAMIC LINK LIBRARY : g_audio Project Overview 3 | ======================================================================== 4 | 5 | AppWizard has created this g_audio DLL for you. 6 | 7 | This file contains a summary of what you will find in each of the files that 8 | make up your g_audio application. 9 | 10 | 11 | g_audio.vcxproj 12 | This is the main project file for VC++ projects generated using an Application Wizard. 13 | It contains information about the version of Visual C++ that generated the file, and 14 | information about the platforms, configurations, and project features selected with the 15 | Application Wizard. 16 | 17 | g_audio.vcxproj.filters 18 | This is the filters file for VC++ projects generated using an Application Wizard. 19 | It contains information about the association between the files in your project 20 | and the filters. This association is used in the IDE to show grouping of files with 21 | similar extensions under a specific node (for e.g. ".cpp" files are associated with the 22 | "Source Files" filter). 23 | 24 | g_audio.cpp 25 | This is the main DLL source file. 26 | 27 | When created, this DLL does not export any symbols. As a result, it 28 | will not produce a .lib file when it is built. If you wish this project 29 | to be a project dependency of some other project, you will either need to 30 | add code to export some symbols from the DLL so that an export library 31 | will be produced, or you can set the Ignore Input Library property to Yes 32 | on the General propert page of the Linker folder in the project's Property 33 | Pages dialog box. 34 | 35 | ///////////////////////////////////////////////////////////////////////////// 36 | Other standard files: 37 | 38 | StdAfx.h, StdAfx.cpp 39 | These files are used to build a precompiled header (PCH) file 40 | named g_audio.pch and a precompiled types file named StdAfx.obj. 41 | 42 | ///////////////////////////////////////////////////////////////////////////// 43 | Other notes: 44 | 45 | AppWizard uses "TODO:" comments to indicate parts of the source code you 46 | should add to or customize. 47 | 48 | ///////////////////////////////////////////////////////////////////////////// 49 | -------------------------------------------------------------------------------- /src/C++/base64.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Written by Manuel Badzong. If you have suggestions or improvements, let me 3 | * know. 4 | */ 5 | #include "stdafx.h" 6 | #include 7 | #include 8 | #include 9 | 10 | #include 11 | #include 12 | 13 | static char encoder[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 14 | static char decoder[256]; 15 | static int initialized; 16 | 17 | static void 18 | base64_init_decoder(void) 19 | { 20 | int i = 0; 21 | 22 | if (initialized) 23 | { 24 | return; 25 | } 26 | 27 | // -1 is used for error detection 28 | memset(decoder, -1, sizeof decoder); 29 | 30 | for (; i < 64; decoder[(int) encoder[i]] = i, ++i); 31 | 32 | initialized = 1; 33 | 34 | return; 35 | } 36 | 37 | static int 38 | base64_encsize(int size) 39 | { 40 | return 4 * ((size + 2) / 3); 41 | } 42 | 43 | int 44 | base64_encode(char *dest, int size, unsigned char *src, int slen) 45 | { 46 | int dlen, i, j; 47 | uint32_t a, b, c, triple; 48 | 49 | dlen = base64_encsize(slen); 50 | 51 | // Sanity checks 52 | if (src == NULL || dest == NULL) 53 | { 54 | return -1; 55 | } 56 | if (dlen + 1 > size) 57 | { 58 | return -1; 59 | } 60 | if (slen == 0) 61 | { 62 | if (size > 0) 63 | { 64 | dest[0] = 0; 65 | return 0; 66 | } 67 | return -1; 68 | } 69 | 70 | for (i = 0, j = 0; i < slen;) 71 | { 72 | a = src[i++]; 73 | 74 | // b and c may be off limit 75 | b = i < slen ? src[i++] : 0; 76 | c = i < slen ? src[i++] : 0; 77 | 78 | triple = (a << 16) + (b << 8) + c; 79 | 80 | dest[j++] = encoder[(triple >> 18) & 0x3F]; 81 | dest[j++] = encoder[(triple >> 12) & 0x3F]; 82 | dest[j++] = encoder[(triple >> 6) & 0x3F]; 83 | dest[j++] = encoder[triple & 0x3F]; 84 | } 85 | 86 | // Pad zeroes at the end 87 | switch (slen % 3) 88 | { 89 | case 1: 90 | dest[j - 2] = '='; 91 | case 2: 92 | dest[j - 1] = '='; 93 | } 94 | 95 | // Always add \0 96 | dest[j] = 0; 97 | 98 | return dlen; 99 | } 100 | 101 | char * 102 | base64_enc_malloc(unsigned char *src, int slen) 103 | { 104 | int size; 105 | char *buffer; 106 | 107 | size = base64_encsize(slen) + 1; 108 | 109 | buffer = (char *) malloc(size); 110 | if (buffer == NULL) 111 | { 112 | return NULL; 113 | } 114 | 115 | size = base64_encode(buffer, size, src, slen); 116 | if (size == -1) 117 | { 118 | free(buffer); 119 | return NULL; 120 | } 121 | 122 | return buffer; 123 | } 124 | 125 | static int 126 | base64_decsize(char *src) 127 | { 128 | int slen, size, i; 129 | 130 | if (src == NULL) 131 | { 132 | return 0; 133 | } 134 | 135 | slen = strlen(src); 136 | size = slen / 4 * 3; 137 | 138 | // Count pad chars 139 | for (i = 0 ; src[slen - i - 1] == '='; ++i); 140 | 141 | // Remove at most 2 bytes. 142 | return size - (i >= 2? 2: i); 143 | } 144 | 145 | 146 | int 147 | base64_decode(unsigned char *dest, int size, char *src) 148 | { 149 | int slen, dlen, padlen, i, j; 150 | uint32_t a, b, c, d, triple; 151 | 152 | // Initialize decoder 153 | base64_init_decoder(); 154 | 155 | // Sanity checks 156 | if (src == NULL || dest == NULL) 157 | { 158 | return -1; 159 | } 160 | 161 | slen = strlen(src); 162 | if (slen == 0) 163 | { 164 | if (size > 0) 165 | { 166 | dest[0] = 0; 167 | return 0; 168 | } 169 | return -1; 170 | } 171 | 172 | // Remove trailing pad characters. 173 | for (padlen = 0; src[slen - padlen - 1] == '='; ++padlen); 174 | if (padlen > 2) 175 | { 176 | slen -= padlen - 2; 177 | } 178 | if (slen % 4) 179 | { 180 | return -1; 181 | } 182 | 183 | dlen = base64_decsize(src); 184 | 185 | // Check buffer size 186 | if (dlen + 1 > size) 187 | { 188 | return -1; 189 | } 190 | 191 | for (i = 0, j = 0; i < slen;) 192 | { 193 | a = decoder[(int) src[i++]]; 194 | b = decoder[(int) src[i++]]; 195 | c = decoder[(int) src[i++]]; 196 | d = decoder[(int) src[i++]]; 197 | 198 | // Sextet 3 and 4 may be zero at the end 199 | if (i == slen) 200 | { 201 | if (src[slen - 1] == '=') 202 | { 203 | d = 0; 204 | if (src[slen - 2] == '=') 205 | { 206 | c = 0; 207 | } 208 | } 209 | } 210 | 211 | // Non-Base64 char 212 | if (a == -1 || b == -1 || c == -1 || d == -1) 213 | { 214 | return -1; 215 | } 216 | 217 | triple = (a << 18) + (b << 12) + (c << 6) + d; 218 | 219 | if (j < dlen) dest[j++] = (triple >> 16) & 0xFF; 220 | if (j < dlen) dest[j++] = (triple >> 8) & 0xFF; 221 | if (j < dlen) dest[j++] = triple & 0xFF; 222 | } 223 | 224 | // Always add \0 225 | dest[j] = 0; 226 | 227 | return dlen; 228 | } 229 | 230 | unsigned char * 231 | base64_dec_malloc(char *src, int32_t* dec_size) 232 | { 233 | int size; 234 | unsigned char *buffer; 235 | 236 | if (dec_size == NULL) 237 | { 238 | return NULL; 239 | } 240 | 241 | size = base64_decsize(src) + 1; 242 | 243 | buffer = (unsigned char *) malloc(size); 244 | if (buffer == NULL) 245 | { 246 | return NULL; 247 | } 248 | 249 | size = base64_decode(buffer, size, src); 250 | if (size == -1) 251 | { 252 | free(buffer); 253 | return NULL; 254 | } 255 | 256 | *dec_size = size; 257 | return buffer; 258 | } 259 | 260 | #ifdef DEBUG 261 | int 262 | main(void) 263 | { 264 | struct testcase { 265 | char *dec; 266 | char *enc; 267 | int fail; 268 | int reverse; 269 | }; 270 | 271 | struct testcase cases[] = { 272 | {"MQ==", "1", 0, 1}, 273 | {"MTI=", "12", 0, 1}, 274 | {"MTIz", "123", 0, 1}, 275 | {"MTIzNA==", "1234", 0, 1}, 276 | {"SGVsbG8gV29ybGQ=", "Hello World", 0, 1}, 277 | {"aGVsbG8gd29ybGQ=", "hello world", 0, 1}, 278 | {"Zm9vYmFy", "foobar", 0, 1}, 279 | {"YmFyZm9v", "barfoo", 0, 1}, 280 | {"dGVzdA==", "test", 0, 1}, 281 | 282 | // Edge cases 283 | {"", "", 0, 1}, 284 | {"dGVzdA===", "test", 0, 0}, 285 | {"dGVzdA====", "test", 0, 0}, 286 | {"=", NULL, 1, 0}, 287 | {"==", NULL, 1, 0}, 288 | {"-", NULL, 1, 0}, 289 | {"dGVzd=A==", NULL, 1, 0}, 290 | {"dGVzd=A=", NULL, 1, 0}, 291 | {"d-GVzdA==", NULL, 1, 0}, 292 | {"dGVzdA.=", NULL, 1, 0}, 293 | {"GVzdA==", NULL, 1, 0}, 294 | {NULL, NULL, 0, 0} 295 | }; 296 | char *buffer; 297 | struct testcase *tc; 298 | 299 | for (tc = cases; tc->dec; ++tc) 300 | { 301 | // Decode 302 | buffer = (char *) base64_dec_malloc(tc->dec); 303 | if (tc->fail) 304 | { 305 | assert(buffer == NULL); 306 | continue; 307 | } 308 | 309 | assert(buffer != NULL); 310 | assert(strcmp(buffer, tc->enc) == 0); 311 | free(buffer); 312 | 313 | // Encode 314 | if (tc->reverse) 315 | { 316 | buffer = base64_enc_malloc((unsigned char *) tc->enc, strlen(tc->enc)); 317 | assert(buffer != NULL); 318 | assert(strcmp(buffer, tc->dec) == 0); 319 | free(buffer); 320 | } 321 | } 322 | 323 | return 0; 324 | } 325 | #endif 326 | -------------------------------------------------------------------------------- /src/C++/base64.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Written by Manuel Badzong. If you have suggestions or improvements, let me 3 | * know. 4 | */ 5 | #ifndef _BASE64_H_ 6 | #define _BASE64_H_ 7 | 8 | int base64_encode(char *dest, int size, unsigned char *src, int slen); 9 | char *base64_enc_malloc(unsigned char *src, int slen); 10 | int base64_decode(unsigned char *dest, int size, char *src); 11 | unsigned char *base64_dec_malloc(char *src, int32_t* dec_size); 12 | 13 | #endif 14 | -------------------------------------------------------------------------------- /src/C++/dllmain.cpp: -------------------------------------------------------------------------------- 1 | #if defined( _WIN32 ) 2 | 3 | // dllmain.cpp : Defines the entry point for the DLL application. 4 | #include "stdafx.h" 5 | 6 | BOOL APIENTRY DllMain( HMODULE hModule, 7 | DWORD ul_reason_for_call, 8 | LPVOID lpReserved 9 | ) 10 | { 11 | switch (ul_reason_for_call) 12 | { 13 | case DLL_PROCESS_ATTACH: 14 | case DLL_THREAD_ATTACH: 15 | case DLL_THREAD_DETACH: 16 | case DLL_PROCESS_DETACH: 17 | break; 18 | } 19 | return TRUE; 20 | } 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /src/C++/g_audio.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/C++/g_audio.rc -------------------------------------------------------------------------------- /src/C++/g_audio.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "g_audio", "g_audio.vcxproj", "{1EB632F7-46B4-486C-A9C0-5919F46BB496}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|x64 = Debug|x64 11 | Debug|x86 = Debug|x86 12 | Release|x64 = Release|x64 13 | Release|x86 = Release|x86 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {1EB632F7-46B4-486C-A9C0-5919F46BB496}.Debug|x64.ActiveCfg = Debug|x64 17 | {1EB632F7-46B4-486C-A9C0-5919F46BB496}.Debug|x64.Build.0 = Debug|x64 18 | {1EB632F7-46B4-486C-A9C0-5919F46BB496}.Debug|x86.ActiveCfg = Debug|Win32 19 | {1EB632F7-46B4-486C-A9C0-5919F46BB496}.Debug|x86.Build.0 = Debug|Win32 20 | {1EB632F7-46B4-486C-A9C0-5919F46BB496}.Release|x64.ActiveCfg = Release|x64 21 | {1EB632F7-46B4-486C-A9C0-5919F46BB496}.Release|x64.Build.0 = Release|x64 22 | {1EB632F7-46B4-486C-A9C0-5919F46BB496}.Release|x86.ActiveCfg = Release|Win32 23 | {1EB632F7-46B4-486C-A9C0-5919F46BB496}.Release|x86.Build.0 = Release|Win32 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | EndGlobal 29 | -------------------------------------------------------------------------------- /src/C++/g_audio.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | {1EB632F7-46B4-486C-A9C0-5919F46BB496} 23 | Win32Proj 24 | g_audio 25 | 10.0 26 | g_audio 27 | 28 | 29 | 30 | DynamicLibrary 31 | true 32 | v142 33 | Unicode 34 | 35 | 36 | DynamicLibrary 37 | false 38 | v142 39 | true 40 | Unicode 41 | 42 | 43 | DynamicLibrary 44 | true 45 | v142 46 | Unicode 47 | 48 | 49 | DynamicLibrary 50 | false 51 | v142 52 | true 53 | Unicode 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | true 75 | $(ProjectName)_$(PlatformArchitecture)_DEBUG 76 | 77 | 78 | true 79 | $(ProjectName)_$(PlatformArchitecture)_DEBUG 80 | 81 | 82 | false 83 | $(ProjectName)_$(PlatformArchitecture) 84 | 85 | 86 | false 87 | $(ProjectName)_$(PlatformArchitecture) 88 | 89 | 90 | 91 | Use 92 | Level3 93 | Disabled 94 | WIN32;_DEBUG;_WINDOWS;_USRDLL;G_AUDIO_EXPORTS;%(PreprocessorDefinitions) 95 | true 96 | 97 | 98 | Windows 99 | true 100 | 101 | 102 | 103 | 104 | Use 105 | Level3 106 | Disabled 107 | _DEBUG;_WINDOWS;_USRDLL;G_AUDIO_EXPORTS;%(PreprocessorDefinitions) 108 | true 109 | 110 | 111 | Windows 112 | true 113 | 114 | 115 | 116 | 117 | Level3 118 | Use 119 | MaxSpeed 120 | true 121 | true 122 | WIN32;NDEBUG;_WINDOWS;_USRDLL;G_AUDIO_EXPORTS;%(PreprocessorDefinitions) 123 | true 124 | 125 | 126 | Windows 127 | true 128 | true 129 | true 130 | true 131 | 132 | 133 | copy /Y "$(OutDir)$(TargetFileName)" "$(SolutionDir)..\LabVIEW\G-Audio\lib\$(TargetFileName)" 134 | 135 | 136 | 137 | 138 | Level3 139 | Use 140 | MaxSpeed 141 | true 142 | true 143 | NDEBUG;_WINDOWS;_USRDLL;G_AUDIO_EXPORTS;%(PreprocessorDefinitions) 144 | true 145 | 146 | 147 | Windows 148 | true 149 | true 150 | true 151 | 152 | 153 | copy /Y "$(OutDir)$(TargetFileName)" "$(SolutionDir)..\LabVIEW\G-Audio\lib\$(TargetFileName)" 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | Use 179 | Use 180 | Use 181 | Use 182 | 183 | 184 | 185 | false 186 | 187 | 188 | false 189 | 190 | 191 | false 192 | 193 | 194 | false 195 | 196 | 197 | 198 | 199 | Create 200 | Create 201 | Create 202 | Create 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | -------------------------------------------------------------------------------- /src/C++/g_audio.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | Header Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | Header Files 35 | 36 | 37 | Header Files 38 | 39 | 40 | Header Files 41 | 42 | 43 | Header Files 44 | 45 | 46 | Header Files 47 | 48 | 49 | Header Files 50 | 51 | 52 | Header Files 53 | 54 | 55 | Header Files 56 | 57 | 58 | Header Files 59 | 60 | 61 | Header Files 62 | 63 | 64 | Header Files 65 | 66 | 67 | 68 | 69 | Source Files 70 | 71 | 72 | Source Files 73 | 74 | 75 | Source Files 76 | 77 | 78 | Source Files 79 | 80 | 81 | Source Files 82 | 83 | 84 | 85 | 86 | Resource Files 87 | 88 | 89 | -------------------------------------------------------------------------------- /src/C++/id3tag.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/C++/id3tag.h -------------------------------------------------------------------------------- /src/C++/make.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | OUTPUT_PATH=../LabVIEW/G-Audio/lib 3 | 4 | mkdir -p $OUTPUT_PATH 5 | g++ -shared -fPIC -o g_audio_64.so *.cpp -lm -lpthread -ldl -O3 6 | mv g_audio_64.so $OUTPUT_PATH 7 | -------------------------------------------------------------------------------- /src/C++/make_linx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | OUTPUT_PATH=/usr/lib 3 | 4 | g++ -shared -fPIC -o g_audio_32.so *.cpp -lm -lpthread -ldl -std=c++11 -mfpu=neon -mfloat-abi=softfp -O3 5 | mv g_audio_32.so $OUTPUT_PATH 6 | -------------------------------------------------------------------------------- /src/C++/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ generated include file. 3 | // Used by g_audio.rc 4 | 5 | // Next default values for new objects 6 | // 7 | #ifdef APSTUDIO_INVOKED 8 | #ifndef APSTUDIO_READONLY_SYMBOLS 9 | #define _APS_NEXT_RESOURCE_VALUE 101 10 | #define _APS_NEXT_COMMAND_VALUE 40001 11 | #define _APS_NEXT_CONTROL_VALUE 1001 12 | #define _APS_NEXT_SYMED_VALUE 101 13 | #endif 14 | #endif 15 | -------------------------------------------------------------------------------- /src/C++/stdafx.cpp: -------------------------------------------------------------------------------- 1 | // stdafx.cpp : source file that includes just the standard includes 2 | // g_audio.pch will be the pre-compiled header 3 | // stdafx.obj will contain the pre-compiled type information 4 | 5 | #include "stdafx.h" 6 | 7 | // TODO: reference any additional headers you need in STDAFX.H 8 | // and not in this file 9 | -------------------------------------------------------------------------------- /src/C++/stdafx.h: -------------------------------------------------------------------------------- 1 | // stdafx.h : include file for standard system include files, 2 | // or project specific include files that are used frequently, but 3 | // are changed infrequently 4 | // 5 | 6 | #pragma once 7 | 8 | #if defined( _WIN32 ) 9 | 10 | #define _CRT_NONSTDC_NO_DEPRECATE 11 | #define _CRT_SECURE_NO_WARNINGS 12 | 13 | #include "targetver.h" 14 | 15 | //#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers 16 | // Windows Header Files: 17 | #include 18 | #endif 19 | 20 | 21 | // TODO: reference additional headers your program requires here 22 | -------------------------------------------------------------------------------- /src/C++/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Including SDKDDKVer.h defines the highest available Windows platform. 4 | 5 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 6 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 7 | 8 | #include 9 | -------------------------------------------------------------------------------- /src/C++/thread.h: -------------------------------------------------------------------------------- 1 | /* 2 | ------------------------------------------------------------------------------ 3 | Licensing information can be found at the end of the file. 4 | ------------------------------------------------------------------------------ 5 | 6 | thread.h - v0.3 - Cross platform threading functions for C/C++. 7 | 8 | Modified to include only mutex functions. Threading functions had compilation 9 | issues when built on Windows not using Visual Studio. 10 | 11 | Do this: 12 | #define THREAD_IMPLEMENTATION 13 | before you include this file in *one* C/C++ file to create the implementation. 14 | */ 15 | 16 | #ifndef thread_h 17 | #define thread_h 18 | 19 | #ifndef THREAD_U64 20 | #define THREAD_U64 unsigned long long 21 | #endif 22 | 23 | #define THREAD_STACK_SIZE_DEFAULT ( 0 ) 24 | #define THREAD_SIGNAL_WAIT_INFINITE ( -1 ) 25 | #define THREAD_QUEUE_WAIT_INFINITE ( -1 ) 26 | 27 | typedef union thread_mutex_t thread_mutex_t; 28 | void thread_mutex_init( thread_mutex_t* mutex ); 29 | void thread_mutex_term( thread_mutex_t* mutex ); 30 | void thread_mutex_lock( thread_mutex_t* mutex ); 31 | void thread_mutex_unlock( thread_mutex_t* mutex ); 32 | 33 | #endif /* thread_h */ 34 | 35 | 36 | /** 37 | 38 | Example 39 | ======= 40 | 41 | Here's a basic sample program which starts a second thread which just waits and prints a message. 42 | 43 | #define THREAD_IMPLEMENTATION 44 | #include "thread.h" 45 | 46 | #include // for printf 47 | 48 | int thread_proc( void* user_data) 49 | { 50 | thread_timer_t timer; 51 | thread_timer_init( &timer ); 52 | 53 | int count = 0; 54 | thread_atomic_int_t* exit_flag = (thread_atomic_int_t*) user_data; 55 | while( thread_atomic_int_load( exit_flag ) == 0 ) 56 | { 57 | printf( "Thread... " ); 58 | thread_timer_wait( &timer, 1000000000 ); // sleep for a second 59 | ++count; 60 | } 61 | 62 | thread_timer_term( &timer ); 63 | printf( "Done\n" ); 64 | return count; 65 | } 66 | 67 | int main( int argc, char** argv ) 68 | { 69 | (void) argc, argv; 70 | 71 | thread_atomic_int_t exit_flag; 72 | thread_atomic_int_store( &exit_flag, 0 ); 73 | 74 | thread_ptr_t thread = thread_create( thread_proc, &exit_flag, "Example thread", THREAD_STACK_SIZE_DEFAULT ); 75 | 76 | thread_timer_t timer; 77 | thread_timer_init( &timer ); 78 | for( int i = 0; i < 5; ++i ) 79 | { 80 | printf( "Main... " ); 81 | thread_timer_wait( &timer, 2000000000 ); // sleep for two seconds 82 | } 83 | thread_timer_term( &timer ); 84 | 85 | thread_atomic_int_store( &exit_flag, 1 ); // signal thread to exit 86 | int retval = thread_join( thread ); 87 | 88 | printf( "Count: %d\n", retval ); 89 | 90 | thread_destroy( thread ); 91 | return retval; 92 | } 93 | 94 | 95 | API Documentation 96 | ================= 97 | 98 | thread.h is a single-header library, and does not need any .lib files or other binaries, or any build scripts. To use it, 99 | you just include thread.h to get the API declarations. To get the definitions, you must include thread.h from *one* 100 | single C or C++ file, and #define the symbol `THREAD_IMPLEMENTATION` before you do. 101 | 102 | 103 | Customization 104 | ------------- 105 | thread.h allows for specifying the exact type of 64-bit unsigned integer to be used in its API. By default, it is 106 | defined as `unsigned long long`, but as this is not a standard type on all compilers, you can redefine it by #defining 107 | THREAD_U64 before including thread.h. This is useful if you, for example, use the types from `` in the rest of 108 | your program, and you want thread.h to use compatible types. In this case, you would include thread.h using the 109 | following code: 110 | 111 | #define THREAD_U64 uint64_t 112 | #include "thread.h" 113 | 114 | Note that when customizing this data type, you need to use the same definition in every place where you include 115 | thread.h, as it affect the declarations as well as the definitions. 116 | 117 | 118 | thread_current_thread_id 119 | ------------------------ 120 | 121 | thread_id_t thread_current_thread_id( void ) 122 | 123 | Returns a unique identifier for the calling thread. After the thread terminates, the id might be reused for new threads. 124 | 125 | 126 | thread_yield 127 | ------------ 128 | 129 | void thread_yield( void ) 130 | 131 | Makes the calling thread yield execution to another thread. The operating system controls which thread is switched to. 132 | 133 | 134 | thread_set_high_priority 135 | ------------------------ 136 | 137 | void thread_set_high_priority( void ) 138 | 139 | When created, threads are set to run at normal priority. In some rare cases, such as a sound buffer update loop, it can 140 | be necessary to have one thread of your application run on a higher priority than the rest. Calling 141 | `thread_set_high_priority` will raise the priority of the calling thread, giving it a chance to be run more often. 142 | Do not increase the priority of a thread unless you absolutely have to, as it can negatively affect performance if used 143 | without care. 144 | 145 | 146 | thread_exit 147 | ----------- 148 | 149 | void thread_exit( int return_code ) 150 | 151 | Exits the calling thread, as if you had done `return return_code;` from the main body of the thread function. 152 | 153 | 154 | thread_create 155 | ------------- 156 | 157 | thread_ptr_t thread_create( int (*thread_proc)( void* ), void* user_data, char const* name, int stack_size ) 158 | 159 | Creates a new thread running the `thread_proc` function, passing the `user_data` through to it. The thread will be 160 | given the debug name given in the `name` parameter, if supported on the platform, and it will have the stack size 161 | specified in the `stack_size` parameter. To get the operating system default stack size, use the defined constant 162 | `THREAD_STACK_SIZE_DEFAULT`. When returning from the thread_proc function, the value you return can be received in 163 | another thread by calling thread_join. `thread_create` returns a pointer to the thread instance, which can be used 164 | as a parameter to the functions `thread_destroy` and `thread_join`. 165 | 166 | 167 | thread_destroy 168 | -------------- 169 | 170 | void thread_destroy( thread_ptr_t thread ) 171 | 172 | Destroys a thread that was created by calling `thread_create`. Make sure the thread has exited before you attempt to 173 | destroy it. This can be accomplished by calling `thread_join`. It is not possible for force termination of a thread by 174 | calling `thread_destroy`. 175 | 176 | 177 | thread_join 178 | ----------- 179 | 180 | int thread_join( thread_ptr_t thread ) 181 | 182 | Waits for the specified thread to exit. Returns the value which the thread returned when exiting. 183 | 184 | 185 | thread_mutex_init 186 | ----------------- 187 | 188 | void thread_mutex_init( thread_mutex_t* mutex ) 189 | 190 | Initializes the specified mutex instance, preparing it for use. A mutex can be used to lock sections of code, such that 191 | it can only be run by one thread at a time. 192 | 193 | 194 | thread_mutex_term 195 | ----------------- 196 | 197 | void thread_mutex_term( thread_mutex_t* mutex ) 198 | 199 | Terminates the specified mutex instance, releasing any system resources held by it. 200 | 201 | 202 | thread_mutex_lock 203 | ----------------- 204 | 205 | void thread_mutex_lock( thread_mutex_t* mutex ) 206 | 207 | Takes an exclusive lock on a mutex. If the lock is already taken by another thread, `thread_mutex_lock` will yield the 208 | calling thread and wait for the lock to become available before returning. The mutex must be initialized by calling 209 | `thread_mutex_init` before it can be locked. 210 | 211 | 212 | thread_mutex_unlock 213 | ------------------- 214 | 215 | void thread_mutex_unlock( thread_mutex_t* mutex ) 216 | 217 | Releases a lock taken by calling `thread_mutex_lock`. 218 | 219 | 220 | thread_signal_init 221 | ------------------ 222 | 223 | void thread_signal_init( thread_signal_t* signal ) 224 | 225 | Initializes the specified signal instance, preparing it for use. A signal works like a flag, which can be waited on by 226 | one thread, until it is raised from another thread. 227 | 228 | 229 | thread_signal_term 230 | ------------------ 231 | 232 | void thread_signal_term( thread_signal_t* signal ) 233 | 234 | Terminates the specified signal instance, releasing any system resources held by it. 235 | 236 | 237 | thread_signal_raise 238 | ------------------- 239 | 240 | void thread_signal_raise( thread_signal_t* signal ) 241 | 242 | Raise the specified signal. Other threads waiting for the signal will proceed. 243 | 244 | 245 | thread_signal_wait 246 | ------------------ 247 | 248 | int thread_signal_wait( thread_signal_t* signal, int timeout_ms ) 249 | 250 | Waits for a signal to be raised, or until `timeout_ms` milliseconds have passed. If the wait timed out, a value of 0 is 251 | returned, otherwise a non-zero value is returned. If the `timeout_ms` parameter is THREAD_SIGNAL_WAIT_INFINITE, 252 | `thread_signal_wait` waits indefinitely. 253 | 254 | 255 | thread_atomic_int_load 256 | ---------------------- 257 | 258 | int thread_atomic_int_load( thread_atomic_int_t* atomic ) 259 | 260 | Returns the value of `atomic` as an atomic operation. 261 | 262 | 263 | thread_atomic_int_store 264 | ----------------------- 265 | 266 | void thread_atomic_int_store( thread_atomic_int_t* atomic, int desired ) 267 | 268 | Sets the value of `atomic` as an atomic operation. 269 | 270 | 271 | thread_atomic_int_inc 272 | --------------------- 273 | 274 | int thread_atomic_int_inc( thread_atomic_int_t* atomic ) 275 | 276 | Increments the value of `atomic` by one, as an atomic operation. Returns the value `atomic` had before the operation. 277 | 278 | 279 | thread_atomic_int_dec 280 | --------------------- 281 | 282 | int thread_atomic_int_dec( thread_atomic_int_t* atomic ) 283 | 284 | Decrements the value of `atomic` by one, as an atomic operation. Returns the value `atomic` had before the operation. 285 | 286 | 287 | thread_atomic_int_add 288 | --------------------- 289 | 290 | int thread_atomic_int_add( thread_atomic_int_t* atomic, int value ) 291 | 292 | Adds the specified value to `atomic`, as an atomic operation. Returns the value `atomic` had before the operation. 293 | 294 | 295 | thread_atomic_int_sub 296 | --------------------- 297 | 298 | int thread_atomic_int_sub( thread_atomic_int_t* atomic, int value ) 299 | 300 | Subtracts the specified value to `atomic`, as an atomic operation. Returns the value `atomic` had before the operation. 301 | 302 | 303 | thread_atomic_int_swap 304 | ---------------------- 305 | 306 | int thread_atomic_int_swap( thread_atomic_int_t* atomic, int desired ) 307 | 308 | Sets the value of `atomic` as an atomic operation. Returns the value `atomic` had before the operation. 309 | 310 | 311 | thread_atomic_int_compare_and_swap 312 | ---------------------------------- 313 | 314 | int thread_atomic_int_compare_and_swap( thread_atomic_int_t* atomic, int expected, int desired ) 315 | 316 | Compares the value of `atomic` to the value of `expected`, and if they match, sets the vale of `atomic` to `desired`, 317 | all as an atomic operation. Returns the value `atomic` had before the operation. 318 | 319 | 320 | thread_atomic_ptr_load 321 | ---------------------- 322 | 323 | void* thread_atomic_ptr_load( thread_atomic_ptr_t* atomic ) 324 | 325 | Returns the value of `atomic` as an atomic operation. 326 | 327 | 328 | thread_atomic_ptr_store 329 | ----------------------- 330 | 331 | void thread_atomic_ptr_store( thread_atomic_ptr_t* atomic, void* desired ) 332 | 333 | Sets the value of `atomic` as an atomic operation. 334 | 335 | 336 | thread_atomic_ptr_swap 337 | ---------------------- 338 | 339 | void* thread_atomic_ptr_swap( thread_atomic_ptr_t* atomic, void* desired ) 340 | 341 | Sets the value of `atomic` as an atomic operation. Returns the value `atomic` had before the operation. 342 | 343 | 344 | thread_atomic_ptr_compare_and_swap 345 | ---------------------------------- 346 | 347 | void* thread_atomic_ptr_compare_and_swap( thread_atomic_ptr_t* atomic, void* expected, void* desired ) 348 | 349 | Compares the value of `atomic` to the value of `expected`, and if they match, sets the vale of `atomic` to `desired`, 350 | all as an atomic operation. Returns the value `atomic` had before the operation. 351 | 352 | 353 | thread_timer_init 354 | ----------------- 355 | 356 | void thread_timer_init( thread_timer_t* timer ) 357 | 358 | Initializes the specified timer instance, preparing it for use. A timer can be used to sleep a thread for a high 359 | precision duration. 360 | 361 | 362 | thread_timer_term 363 | ----------------- 364 | 365 | void thread_timer_term( thread_timer_t* timer ) 366 | 367 | Terminates the specified timer instance, releasing any system resources held by it. 368 | 369 | 370 | thread_timer_wait 371 | ----------------- 372 | 373 | void thread_timer_wait( thread_timer_t* timer, THREAD_U64 nanoseconds ) 374 | 375 | Waits until `nanoseconds` amount of time have passed, before returning. 376 | 377 | 378 | thread_tls_create 379 | ----------------- 380 | 381 | thread_tls_t thread_tls_create( void ) 382 | 383 | Creates a thread local storage (TLS) index. Once created, each thread has its own value for that TLS index, which can 384 | be set or retrieved individually. 385 | 386 | 387 | thread_tls_destroy 388 | ------------------ 389 | 390 | void thread_tls_destroy( thread_tls_t tls ) 391 | 392 | Destroys the specified TLS index. No further calls to `thread_tls_set` or `thread_tls_get` are valid after this. 393 | 394 | 395 | thread_tls_set 396 | -------------- 397 | 398 | void thread_tls_set( thread_tls_t tls, void* value ) 399 | 400 | Stores a value in the calling thread's slot for the specified TLS index. Each thread has its own value for each TLS 401 | index. 402 | 403 | 404 | thread_tls_get 405 | -------------- 406 | 407 | void* thread_tls_get( thread_tls_t tls ) 408 | 409 | Retrieves the value from the calling thread's slot for the specified TLS index. Each thread has its own value for each 410 | TLS index. 411 | 412 | 413 | thread_queue_init 414 | ----------------- 415 | 416 | void thread_queue_init( thread_queue_t* queue, int size, void** values, int count ) 417 | 418 | Initializes the specified queue instance, preparing it for use. The queue is a lock-free (but not wait-free) 419 | single-producer/single-consumer queue - it will not acquire any locks as long as there is space for adding or items to 420 | be consume, but will lock and wait when there is not. The `size` parameter specifies the number of elements in the 421 | queue. The `values` parameter is an array of queue slots (`size` elements in length), each being of type `void*`. If 422 | the queue is initially empty, the `count` parameter should be 0, otherwise it indicates the number of entires, from the 423 | start of the `values` array, that the queue is initialized with. The `values` array is not copied, and must remain valid 424 | until `thread_queue_term` is called. 425 | 426 | 427 | thread_queue_term 428 | ----------------- 429 | 430 | void thread_queue_term( thread_queue_t* queue ) 431 | 432 | Terminates the specified queue instance, releasing any system resources held by it. 433 | 434 | 435 | thread_queue_produce 436 | -------------------- 437 | 438 | int thread_queue_produce( thread_queue_t* queue, void* value, int timeout_ms ) 439 | 440 | Adds an element to a single-producer/single-consumer queue. If there is space in the queue to add another element, no 441 | lock will be taken. If the queue is full, calling thread will sleep until an element is consumed from another thread, 442 | before adding the element, or until `timeout_ms` milliseconds have passed. If the wait timed out, a value of 0 is 443 | returned, otherwise a non-zero value is returned. If the `timeout_ms` parameter is THREAD_QUEUE_WAIT_INFINITE, 444 | `thread_queue_produce` waits indefinitely. 445 | 446 | 447 | thread_queue_consume 448 | -------------------- 449 | 450 | void* thread_queue_consume( thread_queue_t* queue, int timeout_ms ) 451 | 452 | Removes an element from a single-producer/single-consumer queue. If the queue contains at least one element, no lock 453 | will be taken. If the queue is empty, the calling thread will sleep until an element is added from another thread, or 454 | until `timeout_ms` milliseconds have passed. If the wait timed out, a value of NULL is returned, otherwise 455 | `thread_queue_consume` returns the value that was removed from the queue. If the `timeout_ms` parameter is 456 | THREAD_QUEUE_WAIT_INFINITE, `thread_queue_consume` waits indefinitely. 457 | 458 | 459 | thread_queue_count 460 | ------------------ 461 | 462 | int thread_queue_count( thread_queue_t* queue ) 463 | 464 | Returns the number of elements currently held in a single-producer/single-consumer queue. Be aware that by the time you 465 | get the count, it might have changed by another thread calling consume or produce, so use with care. 466 | 467 | **/ 468 | 469 | 470 | /* 471 | ---------------------- 472 | IMPLEMENTATION 473 | ---------------------- 474 | */ 475 | 476 | #ifndef thread_impl 477 | #define thread_impl 478 | 479 | union thread_mutex_t 480 | { 481 | void* align; 482 | char data[ 64 ]; 483 | }; 484 | 485 | #endif /* thread_impl */ 486 | 487 | 488 | 489 | #ifdef THREAD_IMPLEMENTATION 490 | #undef THREAD_IMPLEMENTATION 491 | 492 | 493 | #if defined( _WIN32 ) 494 | 495 | #pragma comment( lib, "winmm.lib" ) 496 | 497 | #define _CRT_NONSTDC_NO_DEPRECATE 498 | #define _CRT_SECURE_NO_WARNINGS 499 | 500 | #if !defined( _WIN32_WINNT ) || _WIN32_WINNT < 0x0501 501 | #undef _WIN32_WINNT 502 | #define _WIN32_WINNT 0x501// requires Windows XP minimum 503 | #endif 504 | 505 | #define _WINSOCKAPI_ 506 | #pragma warning( push ) 507 | #pragma warning( disable: 4668 ) // 'symbol' is not defined as a preprocessor macro, replacing with '0' for 'directives' 508 | #pragma warning( disable: 4255 ) 509 | #include 510 | #pragma warning( pop ) 511 | 512 | // To set thread name 513 | const DWORD MS_VC_EXCEPTION = 0x406D1388; 514 | #pragma pack( push, 8 ) 515 | typedef struct tagTHREADNAME_INFO 516 | { 517 | DWORD dwType; 518 | LPCSTR szName; 519 | DWORD dwThreadID; 520 | DWORD dwFlags; 521 | } THREADNAME_INFO; 522 | #pragma pack(pop) 523 | 524 | #elif defined( __linux__ ) || defined( __APPLE__ ) || defined( __ANDROID__ ) 525 | 526 | #include 527 | #include 528 | 529 | #else 530 | #error Unknown platform. 531 | #endif 532 | 533 | 534 | #ifndef NDEBUG 535 | #include 536 | #endif 537 | 538 | 539 | void thread_mutex_init( thread_mutex_t* mutex ) 540 | { 541 | #if defined( _WIN32 ) 542 | 543 | // Compile-time size check 544 | #pragma warning( push ) 545 | #pragma warning( disable: 4214 ) // nonstandard extension used: bit field types other than int 546 | struct x { char thread_mutex_type_too_small : ( sizeof( thread_mutex_t ) < sizeof( CRITICAL_SECTION ) ? 0 : 1 ); }; 547 | #pragma warning( pop ) 548 | 549 | InitializeCriticalSectionAndSpinCount( (CRITICAL_SECTION*) mutex, 32 ); 550 | 551 | #elif defined( __linux__ ) || defined( __APPLE__ ) || defined( __ANDROID__ ) 552 | 553 | // Compile-time size check 554 | struct x { char thread_mutex_type_too_small : ( sizeof( thread_mutex_t ) < sizeof( pthread_mutex_t ) ? 0 : 1 ); }; 555 | 556 | pthread_mutex_init( (pthread_mutex_t*) mutex, NULL ); 557 | 558 | #else 559 | #error Unknown platform. 560 | #endif 561 | } 562 | 563 | 564 | void thread_mutex_term( thread_mutex_t* mutex ) 565 | { 566 | #if defined( _WIN32 ) 567 | 568 | DeleteCriticalSection( (CRITICAL_SECTION*) mutex ); 569 | 570 | #elif defined( __linux__ ) || defined( __APPLE__ ) || defined( __ANDROID__ ) 571 | 572 | pthread_mutex_destroy( (pthread_mutex_t*) mutex ); 573 | 574 | #else 575 | #error Unknown platform. 576 | #endif 577 | } 578 | 579 | 580 | void thread_mutex_lock( thread_mutex_t* mutex ) 581 | { 582 | #if defined( _WIN32 ) 583 | 584 | EnterCriticalSection( (CRITICAL_SECTION*) mutex ); 585 | 586 | #elif defined( __linux__ ) || defined( __APPLE__ ) || defined( __ANDROID__ ) 587 | 588 | pthread_mutex_lock( (pthread_mutex_t*) mutex ); 589 | 590 | #else 591 | #error Unknown platform. 592 | #endif 593 | } 594 | 595 | 596 | void thread_mutex_unlock( thread_mutex_t* mutex ) 597 | { 598 | #if defined( _WIN32 ) 599 | 600 | LeaveCriticalSection( (CRITICAL_SECTION*) mutex ); 601 | 602 | #elif defined( __linux__ ) || defined( __APPLE__ ) || defined( __ANDROID__ ) 603 | 604 | pthread_mutex_unlock( (pthread_mutex_t*) mutex ); 605 | 606 | #else 607 | #error Unknown platform. 608 | #endif 609 | } 610 | 611 | #endif /* THREAD_IMPLEMENTATION */ 612 | 613 | /* 614 | revision history: 615 | 0.3 set_high_priority API change. Fixed spurious wakeup bug in signal. Added 616 | timeout param to queue produce/consume. Various cleanup and trivial fixes. 617 | 0.2 first publicly released version 618 | */ 619 | 620 | /* 621 | ------------------------------------------------------------------------------ 622 | 623 | This software is available under 2 licenses - you may choose the one you like. 624 | 625 | ------------------------------------------------------------------------------ 626 | 627 | ALTERNATIVE A - MIT License 628 | 629 | Copyright (c) 2015 Mattias Gustavsson 630 | 631 | Permission is hereby granted, free of charge, to any person obtaining a copy of 632 | this software and associated documentation files (the "Software"), to deal in 633 | the Software without restriction, including without limitation the rights to 634 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 635 | of the Software, and to permit persons to whom the Software is furnished to do 636 | so, subject to the following conditions: 637 | 638 | The above copyright notice and this permission notice shall be included in all 639 | copies or substantial portions of the Software. 640 | 641 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 642 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 643 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 644 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 645 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 646 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 647 | SOFTWARE. 648 | 649 | ------------------------------------------------------------------------------ 650 | 651 | ALTERNATIVE B - Public Domain (www.unlicense.org) 652 | 653 | This is free and unencumbered software released into the public domain. 654 | 655 | Anyone is free to copy, modify, publish, use, compile, sell, or distribute this 656 | software, either in source code form or as a compiled binary, for any purpose, 657 | commercial or non-commercial, and by any means. 658 | 659 | In jurisdictions that recognize copyright laws, the author or authors of this 660 | software dedicate any and all copyright interest in the software to the public 661 | domain. We make this dedication for the benefit of the public at large and to 662 | the detriment of our heirs and successors. We intend this dedication to be an 663 | overt act of relinquishment in perpetuity of all present and future rights to 664 | this software under copyright law. 665 | 666 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 667 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 668 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 669 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 670 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 671 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 672 | 673 | ------------------------------------------------------------------------------ 674 | */ -------------------------------------------------------------------------------- /src/C++/thread_safety.cpp: -------------------------------------------------------------------------------- 1 | #include "stdafx.h" 2 | #define THREAD_IMPLEMENTATION 3 | #include "thread_safety.h" 4 | 5 | // These variables will be kept in memory while LabVIEW has DLL loaded. 6 | // LabVIEW won't unload DLL until entire VI call chain is removed from memory, or explicitly removed by wiring empty path to CLFN. 7 | 8 | ga_refnum refnums[ga_refnum_count]; 9 | thread_mutex_t ga_mutexes[ga_mutex_count] = { 0 }; 10 | 11 | // Create the refnums mutex if it doesn't already exist. 12 | // If it does exist, do nothing. 13 | // Could maybe use the CLFN's reserve callback to call this rather than every lock / unlock 14 | static inline void create_refnums_mutex(ga_refnum_type refnum_type) 15 | { 16 | // Init the mutex if it doesn't exist 17 | if (strlen(refnums[refnum_type].refnums_mutex.data) == 0) 18 | { 19 | thread_mutex_init(&(refnums[refnum_type].refnums_mutex)); 20 | } 21 | } 22 | 23 | // Lock the refnums mutex. Will attempt to create the mutex first in case it doesn't exist. 24 | static void lock_refnums_mutex(ga_refnum_type refnum_type) 25 | { 26 | create_refnums_mutex(refnum_type); 27 | thread_mutex_lock(&(refnums[refnum_type].refnums_mutex)); 28 | return; 29 | } 30 | 31 | // Unlock the refnums mutex. Will attempt to create the mutex first in case it doesn't exist. 32 | static void unlock_refnums_mutex(ga_refnum_type refnum_type) 33 | { 34 | create_refnums_mutex(refnum_type); 35 | thread_mutex_unlock(&(refnums[refnum_type].refnums_mutex)); 36 | return; 37 | } 38 | 39 | // Creates a new refnum and stores it and its data into the allocated refnums, returning the new refnum value. 40 | // If the refnum allocation is exhausted, returns -1. 41 | int32_t create_insert_refnum_data(ga_refnum_type refnum_type, void* data) 42 | { 43 | int32_t new_reference = 0; 44 | 45 | lock_refnums_mutex(refnum_type); 46 | //// START CRITICAL SECTION //// 47 | do 48 | { 49 | // update reference id 50 | refnums[refnum_type].refnum_counter++; 51 | // Check for roll over of reference counter. 52 | if (refnums[refnum_type].refnum_counter < 0) 53 | { 54 | refnums[refnum_type].refnum_counter = 0; 55 | } 56 | new_reference = refnums[refnum_type].refnum_counter; 57 | if (!refnums[refnum_type].refnums.count(new_reference)) 58 | { 59 | refnums[refnum_type].refnums[new_reference] = data; 60 | break; 61 | } 62 | // Check if maximum reference allocation has been reached. 63 | else if (refnums[refnum_type].refnums.size() >= INT_MAX) 64 | { 65 | new_reference = -1; 66 | break; 67 | } 68 | } while (1); 69 | //// END CRITICAL SECTION //// 70 | unlock_refnums_mutex(refnum_type); 71 | 72 | return new_reference; 73 | } 74 | 75 | // Updates the data in the refnum allocation for the given refnum. 76 | void update_reference_data(ga_refnum_type refnum_type, int32_t reference, void * data) 77 | { 78 | lock_refnums_mutex(refnum_type); 79 | //// START CRITICAL SECTION //// 80 | if (refnums[refnum_type].refnums.count(reference)) 81 | { 82 | refnums[refnum_type].refnums[reference] = data; 83 | } 84 | //// END CRITICAL SECTION //// 85 | unlock_refnums_mutex(refnum_type); 86 | } 87 | 88 | // Retrieves the data in the refnum allocation for the given refnum. 89 | void* get_reference_data(ga_refnum_type refnum_type, int32_t reference) 90 | { 91 | void* data = NULL; 92 | 93 | lock_refnums_mutex(refnum_type); 94 | //// START CRITICAL SECTION //// 95 | if (refnums[refnum_type].refnums.count(reference)) 96 | { 97 | data = refnums[refnum_type].refnums[reference]; 98 | } 99 | //// END CRITICAL SECTION //// 100 | unlock_refnums_mutex(refnum_type); 101 | 102 | return data; 103 | } 104 | 105 | // Removes the refnum from the refnum allocation, returning its data. 106 | // The caller is responsible for freeing the data. 107 | void* remove_reference(ga_refnum_type refnum_type, int32_t reference) 108 | { 109 | void* data = NULL; 110 | 111 | lock_refnums_mutex(refnum_type); 112 | //// START CRITICAL SECTION //// 113 | if (refnums[refnum_type].refnums.count(reference)) 114 | { 115 | data = refnums[refnum_type].refnums[reference]; 116 | refnums[refnum_type].refnums.erase(reference); 117 | } 118 | //// END CRITICAL SECTION //// 119 | unlock_refnums_mutex(refnum_type); 120 | 121 | return data; 122 | } 123 | 124 | std::vector get_all_references(ga_refnum_type refnum_type) 125 | { 126 | std::vector all_refnums; 127 | 128 | lock_refnums_mutex(refnum_type); 129 | //// START CRITICAL SECTION //// 130 | for (std::unordered_map::iterator it = refnums[refnum_type].refnums.begin(); it != refnums[refnum_type].refnums.end(); ++it) 131 | { 132 | all_refnums.push_back(it->first); 133 | } 134 | //// END CRITICAL SECTION //// 135 | unlock_refnums_mutex(refnum_type); 136 | 137 | return all_refnums; 138 | } 139 | 140 | 141 | 142 | // Create the context mutex if it doesn't already exist. 143 | // If it does exist, do nothing. 144 | // Could maybe use the CLFN's reserve callback to call this rather than every lock / unlock 145 | inline void create_ga_mutex(ga_mutex_type mutex_type) 146 | { 147 | // Init the mutex if it doesn't exist 148 | if (strlen(ga_mutexes[mutex_type].data) == 0) 149 | { 150 | thread_mutex_init(&ga_mutexes[mutex_type]); 151 | } 152 | } 153 | 154 | // Lock the context mutex. Will attempt to create the mutex first in case it doesn't exist. 155 | void lock_ga_mutex(ga_mutex_type mutex_type) 156 | { 157 | create_ga_mutex(mutex_type); 158 | thread_mutex_lock(&ga_mutexes[mutex_type]); 159 | return; 160 | } 161 | 162 | // Unlock the context mutex. Will attempt to create the mutex first in case it doesn't exist. 163 | void unlock_ga_mutex(ga_mutex_type mutex_type) 164 | { 165 | create_ga_mutex(mutex_type); 166 | thread_mutex_unlock(&ga_mutexes[mutex_type]); 167 | return; 168 | } 169 | -------------------------------------------------------------------------------- /src/C++/thread_safety.h: -------------------------------------------------------------------------------- 1 | #ifndef _THREAD_SAFETY_ 2 | #define _THREAD_SAFETY_ 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | // Need to #define THREAD_IMPLEMENTATION before including thread.h 11 | // Don't do it in this header, as it will cause linkage issues 12 | // Instead define it in thread_safety.cpp 13 | #include "thread.h" 14 | #include "miniaudio.h" 15 | 16 | typedef struct ga_refnum 17 | { 18 | std::unordered_map refnums; 19 | thread_mutex_t refnums_mutex = { 0 }; 20 | int32_t refnum_counter = 0; 21 | } ga_refnum; 22 | 23 | typedef enum 24 | { 25 | ga_refnum_audio_file = 0, 26 | ga_refnum_audio_device, 27 | ga_refnum_count 28 | } ga_refnum_type; 29 | 30 | typedef enum 31 | { 32 | ga_mutex_common = 0, 33 | ga_mutex_context, 34 | ga_mutex_device, 35 | ga_mutex_count 36 | } ga_mutex_type; 37 | 38 | static inline void create_refnums_mutex(ga_refnum_type refnum_type); 39 | static void lock_refnums_mutex(ga_refnum_type refnum_type); 40 | static void unlock_refnums_mutex(ga_refnum_type refnum_type); 41 | 42 | inline void create_ga_mutex(ga_mutex_type mutex_type); 43 | void lock_ga_mutex(ga_mutex_type mutex_type); 44 | void unlock_ga_mutex(ga_mutex_type mutex_type); 45 | 46 | // Create and insert a new unique reference to the global references 47 | int32_t create_insert_refnum_data(ga_refnum_type refnum_type, void* data); 48 | void update_reference_data(ga_refnum_type refnum_type, int32_t reference, void* data); 49 | void* get_reference_data(ga_refnum_type refnum_type, int32_t reference); 50 | void* remove_reference(ga_refnum_type refnum_type, int32_t reference); 51 | std::vector get_all_references(ga_refnum_type refnum_type); 52 | 53 | #endif 54 | -------------------------------------------------------------------------------- /src/C++/xcode/.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## User settings 6 | xcuserdata/ 7 | 8 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 9 | *.xcscmblueprint 10 | *.xccheckout 11 | 12 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 13 | build/ 14 | DerivedData/ 15 | *.moved-aside 16 | *.pbxuser 17 | !default.pbxuser 18 | *.mode1v3 19 | !default.mode1v3 20 | *.mode2v3 21 | !default.mode2v3 22 | *.perspectivev3 23 | !default.perspectivev3 24 | 25 | ## Gcc Patch 26 | /*.gcno 27 | -------------------------------------------------------------------------------- /src/C++/xcode/g_audio/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSHumanReadableCopyright 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/C++/xcode/g_audio_64.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 3CD6706826E0D1FE0040E196 /* xcode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD6706626E0D1FE0040E196 /* xcode.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | 3CD6707626E0D2860040E196 /* thread.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD6706E26E0D2860040E196 /* thread.h */; }; 12 | 3CD6707726E0D2860040E196 /* stb_vorbis.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD6706F26E0D2860040E196 /* stb_vorbis.h */; }; 13 | 3CD6707826E0D2860040E196 /* stdafx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CD6707026E0D2860040E196 /* stdafx.cpp */; }; 14 | 3CD6707926E0D2860040E196 /* stdafx.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD6707126E0D2860040E196 /* stdafx.h */; }; 15 | 3CD6707A26E0D2860040E196 /* thread_safety.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CD6707226E0D2860040E196 /* thread_safety.cpp */; }; 16 | 3CD6707B26E0D2860040E196 /* thread_safety.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD6707326E0D2860040E196 /* thread_safety.h */; }; 17 | 3CD6707C26E0D2860040E196 /* targetver.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD6707426E0D2860040E196 /* targetver.h */; }; 18 | 3CD6707D26E0D2860040E196 /* resource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD6707526E0D2860040E196 /* resource.h */; }; 19 | 3CD6708126E0D2A40040E196 /* miniaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD6707E26E0D2A40040E196 /* miniaudio.h */; }; 20 | 3CD6708226E0D2A40040E196 /* minimp3.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD6707F26E0D2A40040E196 /* minimp3.h */; }; 21 | 3CD6708326E0D2A40040E196 /* minimp3_ex.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD6708026E0D2A40040E196 /* minimp3_ex.h */; }; 22 | 3CD6708626E0D2B00040E196 /* g_audio.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD6708426E0D2B00040E196 /* g_audio.h */; }; 23 | 3CD6708726E0D2B00040E196 /* g_audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CD6708526E0D2B00040E196 /* g_audio.cpp */; }; 24 | 3CD6708B26E0D2CB0040E196 /* dllmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CD6708826E0D2CA0040E196 /* dllmain.cpp */; }; 25 | 3CD6708C26E0D2CB0040E196 /* dr_wav.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD6708926E0D2CB0040E196 /* dr_wav.h */; }; 26 | 3CD6708D26E0D2CB0040E196 /* dr_flac.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD6708A26E0D2CB0040E196 /* dr_flac.h */; }; 27 | 3CD6708F26E0D3C80040E196 /* g_audio in Resources */ = {isa = PBXBuildFile; fileRef = 3CD6708E26E0D3C70040E196 /* g_audio */; }; 28 | E513406328709686005700A8 /* id3tag.h in Headers */ = {isa = PBXBuildFile; fileRef = E513405F28709685005700A8 /* id3tag.h */; }; 29 | E513406428709686005700A8 /* base64.h in Headers */ = {isa = PBXBuildFile; fileRef = E513406028709686005700A8 /* base64.h */; }; 30 | E513406528709686005700A8 /* stb_image.h in Headers */ = {isa = PBXBuildFile; fileRef = E513406128709686005700A8 /* stb_image.h */; }; 31 | E513406628709686005700A8 /* base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E513406228709686005700A8 /* base64.cpp */; }; 32 | /* End PBXBuildFile section */ 33 | 34 | /* Begin PBXFileReference section */ 35 | 3CD6706326E0D1FE0040E196 /* g_audio_64.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = g_audio_64.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 36 | 3CD6706626E0D1FE0040E196 /* xcode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = xcode.h; sourceTree = ""; }; 37 | 3CD6706E26E0D2860040E196 /* thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = thread.h; path = ../thread.h; sourceTree = ""; }; 38 | 3CD6706F26E0D2860040E196 /* stb_vorbis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stb_vorbis.h; path = ../stb_vorbis.h; sourceTree = ""; }; 39 | 3CD6707026E0D2860040E196 /* stdafx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stdafx.cpp; path = ../stdafx.cpp; sourceTree = ""; }; 40 | 3CD6707126E0D2860040E196 /* stdafx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stdafx.h; path = ../stdafx.h; sourceTree = ""; }; 41 | 3CD6707226E0D2860040E196 /* thread_safety.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thread_safety.cpp; path = ../thread_safety.cpp; sourceTree = ""; }; 42 | 3CD6707326E0D2860040E196 /* thread_safety.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = thread_safety.h; path = ../thread_safety.h; sourceTree = ""; }; 43 | 3CD6707426E0D2860040E196 /* targetver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = targetver.h; path = ../targetver.h; sourceTree = ""; }; 44 | 3CD6707526E0D2860040E196 /* resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = resource.h; path = ../resource.h; sourceTree = ""; }; 45 | 3CD6707E26E0D2A40040E196 /* miniaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = miniaudio.h; path = ../miniaudio.h; sourceTree = ""; }; 46 | 3CD6707F26E0D2A40040E196 /* minimp3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = minimp3.h; path = ../minimp3.h; sourceTree = ""; }; 47 | 3CD6708026E0D2A40040E196 /* minimp3_ex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = minimp3_ex.h; path = ../minimp3_ex.h; sourceTree = ""; }; 48 | 3CD6708426E0D2B00040E196 /* g_audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = g_audio.h; path = ../g_audio.h; sourceTree = ""; }; 49 | 3CD6708526E0D2B00040E196 /* g_audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = g_audio.cpp; path = ../g_audio.cpp; sourceTree = ""; }; 50 | 3CD6708826E0D2CA0040E196 /* dllmain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dllmain.cpp; path = ../dllmain.cpp; sourceTree = ""; }; 51 | 3CD6708926E0D2CB0040E196 /* dr_wav.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dr_wav.h; path = ../dr_wav.h; sourceTree = ""; }; 52 | 3CD6708A26E0D2CB0040E196 /* dr_flac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dr_flac.h; path = ../dr_flac.h; sourceTree = ""; }; 53 | 3CD6708E26E0D3C70040E196 /* g_audio */ = {isa = PBXFileReference; lastKnownFileType = folder; path = g_audio; sourceTree = ""; }; 54 | E513405F28709685005700A8 /* id3tag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = id3tag.h; path = ../id3tag.h; sourceTree = ""; }; 55 | E513406028709686005700A8 /* base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = base64.h; path = ../base64.h; sourceTree = ""; }; 56 | E513406128709686005700A8 /* stb_image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stb_image.h; path = ../stb_image.h; sourceTree = ""; }; 57 | E513406228709686005700A8 /* base64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = base64.cpp; path = ../base64.cpp; sourceTree = ""; }; 58 | /* End PBXFileReference section */ 59 | 60 | /* Begin PBXFrameworksBuildPhase section */ 61 | 3CD6706026E0D1FE0040E196 /* Frameworks */ = { 62 | isa = PBXFrameworksBuildPhase; 63 | buildActionMask = 2147483647; 64 | files = ( 65 | ); 66 | runOnlyForDeploymentPostprocessing = 0; 67 | }; 68 | /* End PBXFrameworksBuildPhase section */ 69 | 70 | /* Begin PBXGroup section */ 71 | 3CD6705926E0D1FE0040E196 = { 72 | isa = PBXGroup; 73 | children = ( 74 | E513406228709686005700A8 /* base64.cpp */, 75 | E513406028709686005700A8 /* base64.h */, 76 | E513405F28709685005700A8 /* id3tag.h */, 77 | E513406128709686005700A8 /* stb_image.h */, 78 | 3CD6708E26E0D3C70040E196 /* g_audio */, 79 | 3CD6708826E0D2CA0040E196 /* dllmain.cpp */, 80 | 3CD6708A26E0D2CB0040E196 /* dr_flac.h */, 81 | 3CD6708926E0D2CB0040E196 /* dr_wav.h */, 82 | 3CD6708526E0D2B00040E196 /* g_audio.cpp */, 83 | 3CD6708426E0D2B00040E196 /* g_audio.h */, 84 | 3CD6707E26E0D2A40040E196 /* miniaudio.h */, 85 | 3CD6708026E0D2A40040E196 /* minimp3_ex.h */, 86 | 3CD6707F26E0D2A40040E196 /* minimp3.h */, 87 | 3CD6707526E0D2860040E196 /* resource.h */, 88 | 3CD6706F26E0D2860040E196 /* stb_vorbis.h */, 89 | 3CD6707026E0D2860040E196 /* stdafx.cpp */, 90 | 3CD6707126E0D2860040E196 /* stdafx.h */, 91 | 3CD6707426E0D2860040E196 /* targetver.h */, 92 | 3CD6707226E0D2860040E196 /* thread_safety.cpp */, 93 | 3CD6707326E0D2860040E196 /* thread_safety.h */, 94 | 3CD6706E26E0D2860040E196 /* thread.h */, 95 | 3CD6706626E0D1FE0040E196 /* xcode.h */, 96 | 3CD6706426E0D1FE0040E196 /* Products */, 97 | ); 98 | sourceTree = ""; 99 | }; 100 | 3CD6706426E0D1FE0040E196 /* Products */ = { 101 | isa = PBXGroup; 102 | children = ( 103 | 3CD6706326E0D1FE0040E196 /* g_audio_64.framework */, 104 | ); 105 | name = Products; 106 | sourceTree = ""; 107 | }; 108 | /* End PBXGroup section */ 109 | 110 | /* Begin PBXHeadersBuildPhase section */ 111 | 3CD6705E26E0D1FE0040E196 /* Headers */ = { 112 | isa = PBXHeadersBuildPhase; 113 | buildActionMask = 2147483647; 114 | files = ( 115 | 3CD6708D26E0D2CB0040E196 /* dr_flac.h in Headers */, 116 | 3CD6708126E0D2A40040E196 /* miniaudio.h in Headers */, 117 | 3CD6707926E0D2860040E196 /* stdafx.h in Headers */, 118 | 3CD6708226E0D2A40040E196 /* minimp3.h in Headers */, 119 | 3CD6707626E0D2860040E196 /* thread.h in Headers */, 120 | E513406428709686005700A8 /* base64.h in Headers */, 121 | 3CD6707D26E0D2860040E196 /* resource.h in Headers */, 122 | 3CD6708326E0D2A40040E196 /* minimp3_ex.h in Headers */, 123 | 3CD6707726E0D2860040E196 /* stb_vorbis.h in Headers */, 124 | 3CD6707B26E0D2860040E196 /* thread_safety.h in Headers */, 125 | 3CD6708626E0D2B00040E196 /* g_audio.h in Headers */, 126 | E513406328709686005700A8 /* id3tag.h in Headers */, 127 | E513406528709686005700A8 /* stb_image.h in Headers */, 128 | 3CD6708C26E0D2CB0040E196 /* dr_wav.h in Headers */, 129 | 3CD6706826E0D1FE0040E196 /* xcode.h in Headers */, 130 | 3CD6707C26E0D2860040E196 /* targetver.h in Headers */, 131 | ); 132 | runOnlyForDeploymentPostprocessing = 0; 133 | }; 134 | /* End PBXHeadersBuildPhase section */ 135 | 136 | /* Begin PBXNativeTarget section */ 137 | 3CD6706226E0D1FE0040E196 /* g_audio_64 */ = { 138 | isa = PBXNativeTarget; 139 | buildConfigurationList = 3CD6706B26E0D1FE0040E196 /* Build configuration list for PBXNativeTarget "g_audio_64" */; 140 | buildPhases = ( 141 | 3CD6705E26E0D1FE0040E196 /* Headers */, 142 | 3CD6705F26E0D1FE0040E196 /* Sources */, 143 | 3CD6706026E0D1FE0040E196 /* Frameworks */, 144 | 3CD6706126E0D1FE0040E196 /* Resources */, 145 | ); 146 | buildRules = ( 147 | ); 148 | dependencies = ( 149 | ); 150 | name = g_audio_64; 151 | productName = g_audio; 152 | productReference = 3CD6706326E0D1FE0040E196 /* g_audio_64.framework */; 153 | productType = "com.apple.product-type.framework"; 154 | }; 155 | /* End PBXNativeTarget section */ 156 | 157 | /* Begin PBXProject section */ 158 | 3CD6705A26E0D1FE0040E196 /* Project object */ = { 159 | isa = PBXProject; 160 | attributes = { 161 | LastUpgradeCheck = 1150; 162 | ORGANIZATIONNAME = Dataflow_G; 163 | TargetAttributes = { 164 | 3CD6706226E0D1FE0040E196 = { 165 | CreatedOnToolsVersion = 11.5; 166 | }; 167 | }; 168 | }; 169 | buildConfigurationList = 3CD6705D26E0D1FE0040E196 /* Build configuration list for PBXProject "g_audio_64" */; 170 | compatibilityVersion = "Xcode 9.3"; 171 | developmentRegion = en; 172 | hasScannedForEncodings = 0; 173 | knownRegions = ( 174 | en, 175 | Base, 176 | ); 177 | mainGroup = 3CD6705926E0D1FE0040E196; 178 | productRefGroup = 3CD6706426E0D1FE0040E196 /* Products */; 179 | projectDirPath = ""; 180 | projectRoot = ""; 181 | targets = ( 182 | 3CD6706226E0D1FE0040E196 /* g_audio_64 */, 183 | ); 184 | }; 185 | /* End PBXProject section */ 186 | 187 | /* Begin PBXResourcesBuildPhase section */ 188 | 3CD6706126E0D1FE0040E196 /* Resources */ = { 189 | isa = PBXResourcesBuildPhase; 190 | buildActionMask = 2147483647; 191 | files = ( 192 | 3CD6708F26E0D3C80040E196 /* g_audio in Resources */, 193 | ); 194 | runOnlyForDeploymentPostprocessing = 0; 195 | }; 196 | /* End PBXResourcesBuildPhase section */ 197 | 198 | /* Begin PBXSourcesBuildPhase section */ 199 | 3CD6705F26E0D1FE0040E196 /* Sources */ = { 200 | isa = PBXSourcesBuildPhase; 201 | buildActionMask = 2147483647; 202 | files = ( 203 | 3CD6707826E0D2860040E196 /* stdafx.cpp in Sources */, 204 | 3CD6708B26E0D2CB0040E196 /* dllmain.cpp in Sources */, 205 | 3CD6707A26E0D2860040E196 /* thread_safety.cpp in Sources */, 206 | E513406628709686005700A8 /* base64.cpp in Sources */, 207 | 3CD6708726E0D2B00040E196 /* g_audio.cpp in Sources */, 208 | ); 209 | runOnlyForDeploymentPostprocessing = 0; 210 | }; 211 | /* End PBXSourcesBuildPhase section */ 212 | 213 | /* Begin XCBuildConfiguration section */ 214 | 3CD6706926E0D1FE0040E196 /* Debug */ = { 215 | isa = XCBuildConfiguration; 216 | buildSettings = { 217 | ALWAYS_SEARCH_USER_PATHS = NO; 218 | CLANG_ANALYZER_NONNULL = YES; 219 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 220 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 221 | CLANG_CXX_LIBRARY = "libc++"; 222 | CLANG_ENABLE_MODULES = YES; 223 | CLANG_ENABLE_OBJC_ARC = YES; 224 | CLANG_ENABLE_OBJC_WEAK = YES; 225 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 226 | CLANG_WARN_BOOL_CONVERSION = YES; 227 | CLANG_WARN_COMMA = YES; 228 | CLANG_WARN_CONSTANT_CONVERSION = YES; 229 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 230 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 231 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 232 | CLANG_WARN_EMPTY_BODY = YES; 233 | CLANG_WARN_ENUM_CONVERSION = YES; 234 | CLANG_WARN_INFINITE_RECURSION = YES; 235 | CLANG_WARN_INT_CONVERSION = YES; 236 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 237 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 238 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 239 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 240 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 241 | CLANG_WARN_STRICT_PROTOTYPES = YES; 242 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 243 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 244 | CLANG_WARN_UNREACHABLE_CODE = YES; 245 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 246 | COPY_PHASE_STRIP = NO; 247 | CURRENT_PROJECT_VERSION = 1; 248 | DEBUG_INFORMATION_FORMAT = dwarf; 249 | ENABLE_STRICT_OBJC_MSGSEND = YES; 250 | ENABLE_TESTABILITY = YES; 251 | GCC_C_LANGUAGE_STANDARD = gnu11; 252 | GCC_DYNAMIC_NO_PIC = NO; 253 | GCC_NO_COMMON_BLOCKS = YES; 254 | GCC_OPTIMIZATION_LEVEL = 0; 255 | GCC_PREPROCESSOR_DEFINITIONS = ( 256 | "DEBUG=1", 257 | "$(inherited)", 258 | ); 259 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 260 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 261 | GCC_WARN_UNDECLARED_SELECTOR = YES; 262 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 263 | GCC_WARN_UNUSED_FUNCTION = YES; 264 | GCC_WARN_UNUSED_VARIABLE = YES; 265 | MACOSX_DEPLOYMENT_TARGET = 10.7; 266 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 267 | MTL_FAST_MATH = YES; 268 | ONLY_ACTIVE_ARCH = YES; 269 | SDKROOT = macosx; 270 | VERSIONING_SYSTEM = "apple-generic"; 271 | VERSION_INFO_PREFIX = ""; 272 | }; 273 | name = Debug; 274 | }; 275 | 3CD6706A26E0D1FE0040E196 /* Release */ = { 276 | isa = XCBuildConfiguration; 277 | buildSettings = { 278 | ALWAYS_SEARCH_USER_PATHS = NO; 279 | CLANG_ANALYZER_NONNULL = YES; 280 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 281 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 282 | CLANG_CXX_LIBRARY = "libc++"; 283 | CLANG_ENABLE_MODULES = YES; 284 | CLANG_ENABLE_OBJC_ARC = YES; 285 | CLANG_ENABLE_OBJC_WEAK = YES; 286 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 287 | CLANG_WARN_BOOL_CONVERSION = YES; 288 | CLANG_WARN_COMMA = YES; 289 | CLANG_WARN_CONSTANT_CONVERSION = YES; 290 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 291 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 292 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 293 | CLANG_WARN_EMPTY_BODY = YES; 294 | CLANG_WARN_ENUM_CONVERSION = YES; 295 | CLANG_WARN_INFINITE_RECURSION = YES; 296 | CLANG_WARN_INT_CONVERSION = YES; 297 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 298 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 299 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 300 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 301 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 302 | CLANG_WARN_STRICT_PROTOTYPES = YES; 303 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 304 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 305 | CLANG_WARN_UNREACHABLE_CODE = YES; 306 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 307 | COPY_PHASE_STRIP = NO; 308 | CURRENT_PROJECT_VERSION = 1; 309 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 310 | ENABLE_NS_ASSERTIONS = NO; 311 | ENABLE_STRICT_OBJC_MSGSEND = YES; 312 | GCC_C_LANGUAGE_STANDARD = gnu11; 313 | GCC_NO_COMMON_BLOCKS = YES; 314 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 315 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 316 | GCC_WARN_UNDECLARED_SELECTOR = YES; 317 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 318 | GCC_WARN_UNUSED_FUNCTION = YES; 319 | GCC_WARN_UNUSED_VARIABLE = YES; 320 | MACOSX_DEPLOYMENT_TARGET = 10.7; 321 | MTL_ENABLE_DEBUG_INFO = NO; 322 | MTL_FAST_MATH = YES; 323 | SDKROOT = macosx; 324 | VERSIONING_SYSTEM = "apple-generic"; 325 | VERSION_INFO_PREFIX = ""; 326 | }; 327 | name = Release; 328 | }; 329 | 3CD6706C26E0D1FE0040E196 /* Debug */ = { 330 | isa = XCBuildConfiguration; 331 | buildSettings = { 332 | CODE_SIGN_STYLE = Automatic; 333 | COMBINE_HIDPI_IMAGES = YES; 334 | DEFINES_MODULE = YES; 335 | DYLIB_COMPATIBILITY_VERSION = 1; 336 | DYLIB_CURRENT_VERSION = 1; 337 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 338 | INFOPLIST_FILE = g_audio/Info.plist; 339 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 340 | LD_RUNPATH_SEARCH_PATHS = ( 341 | "$(inherited)", 342 | "@executable_path/../Frameworks", 343 | "@loader_path/Frameworks", 344 | ); 345 | MACOSX_DEPLOYMENT_TARGET = 10.7; 346 | MARKETING_VERSION = 0.4.0; 347 | PRODUCT_BUNDLE_IDENTIFIER = "dataflowg.g-audio"; 348 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 349 | SKIP_INSTALL = YES; 350 | }; 351 | name = Debug; 352 | }; 353 | 3CD6706D26E0D1FE0040E196 /* Release */ = { 354 | isa = XCBuildConfiguration; 355 | buildSettings = { 356 | CODE_SIGN_STYLE = Automatic; 357 | COMBINE_HIDPI_IMAGES = YES; 358 | DEFINES_MODULE = YES; 359 | DYLIB_COMPATIBILITY_VERSION = 1; 360 | DYLIB_CURRENT_VERSION = 1; 361 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 362 | INFOPLIST_FILE = g_audio/Info.plist; 363 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 364 | LD_RUNPATH_SEARCH_PATHS = ( 365 | "$(inherited)", 366 | "@executable_path/../Frameworks", 367 | "@loader_path/Frameworks", 368 | ); 369 | MACOSX_DEPLOYMENT_TARGET = 10.7; 370 | MARKETING_VERSION = 0.4.0; 371 | PRODUCT_BUNDLE_IDENTIFIER = "dataflowg.g-audio"; 372 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 373 | SKIP_INSTALL = YES; 374 | }; 375 | name = Release; 376 | }; 377 | /* End XCBuildConfiguration section */ 378 | 379 | /* Begin XCConfigurationList section */ 380 | 3CD6705D26E0D1FE0040E196 /* Build configuration list for PBXProject "g_audio_64" */ = { 381 | isa = XCConfigurationList; 382 | buildConfigurations = ( 383 | 3CD6706926E0D1FE0040E196 /* Debug */, 384 | 3CD6706A26E0D1FE0040E196 /* Release */, 385 | ); 386 | defaultConfigurationIsVisible = 0; 387 | defaultConfigurationName = Release; 388 | }; 389 | 3CD6706B26E0D1FE0040E196 /* Build configuration list for PBXNativeTarget "g_audio_64" */ = { 390 | isa = XCConfigurationList; 391 | buildConfigurations = ( 392 | 3CD6706C26E0D1FE0040E196 /* Debug */, 393 | 3CD6706D26E0D1FE0040E196 /* Release */, 394 | ); 395 | defaultConfigurationIsVisible = 0; 396 | defaultConfigurationName = Release; 397 | }; 398 | /* End XCConfigurationList section */ 399 | }; 400 | rootObject = 3CD6705A26E0D1FE0040E196 /* Project object */; 401 | } 402 | -------------------------------------------------------------------------------- /src/C++/xcode/g_audio_64.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/C++/xcode/g_audio_64.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/C++/xcode/g_audio_64.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/C++/xcode/g_audio_64.xcodeproj/xcshareddata/xcschemes/g_audio.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 11 | 14 | 15 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 33 | 39 | 40 | 41 | 42 | 43 | 48 | 49 | 50 | 51 | 61 | 62 | 68 | 69 | 75 | 76 | 77 | 78 | 80 | 81 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /src/C++/xcode/xcode.h: -------------------------------------------------------------------------------- 1 | // 2 | // g_audio.h 3 | // g_audio 4 | // 5 | // Created by Dataflow_G on 9/2/21. 6 | // Copyright © 2021 Dataflow_G. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for g_audio. 12 | FOUNDATION_EXPORT double g_audioVersionNumber; 13 | 14 | //! Project version string for g_audio. 15 | FOUNDATION_EXPORT const unsigned char g_audioVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Devices/Capture Audio.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Devices/Capture Audio.vim -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Devices/Clear Audio Backend.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Devices/Clear Audio Backend.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Devices/Clear Audio Device.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Devices/Clear Audio Device.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Devices/Configure Audio Device.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Devices/Configure Audio Device.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Devices/Get Audio Device Configuration.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Devices/Get Audio Device Configuration.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Devices/Get Audio Device Volume.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Devices/Get Audio Device Volume.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Devices/Playback Audio.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Devices/Playback Audio.vim -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Devices/Playback Wait.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Devices/Playback Wait.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Devices/Query Audio Backends.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Devices/Query Audio Backends.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Devices/Query Audio Devices.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Devices/Query Audio Devices.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Devices/Set Audio Device Volume.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Devices/Set Audio Device Volume.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Devices/Start Audio Device.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Devices/Start Audio Device.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Devices/Stop Audio Device.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Devices/Stop Audio Device.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Close Audio File.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Close Audio File.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Get Audio File Info.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Get Audio File Info.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Get Audio File Position.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Get Audio File Position.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Get Audio File Tags.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Get Audio File Tags.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Open Audio File Read.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Open Audio File Read.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Open Audio File Write.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Open Audio File Write.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Get Audio File Info (Path).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Get Audio File Info (Path).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Get Audio File Info (UTF-8).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Get Audio File Info (UTF-8).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Get Audio File Tags (Path).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Get Audio File Tags (Path).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Get Audio File Tags (UTF-8).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Get Audio File Tags (UTF-8).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Open Audio File Read (Path).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Open Audio File Read (Path).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Open Audio File Read (UTF-8).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Open Audio File Read (UTF-8).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Open Audio File Write (WAV) (UTF-8).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Open Audio File Write (WAV) (UTF-8).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Open Audio File Write (WAV).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Open Audio File Write (WAV).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Quick Load Audio File (Path).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Quick Load Audio File (Path).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Quick Load Audio File (UTF-8).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Polymorphic VIs/Quick Load Audio File (UTF-8).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Private/Get Audio File Info (Core).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Private/Get Audio File Info (Core).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Private/Get Audio File Tags (Core).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Private/Get Audio File Tags (Core).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Private/Open Audio File Read (Core).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Private/Open Audio File Read (Core).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Private/Open Audio File Write (WAV) (Core).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Private/Open Audio File Write (WAV) (Core).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Private/Quick Load Audio File (Core).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Private/Quick Load Audio File (Core).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Quick Load Audio File.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Quick Load Audio File.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Read Audio File.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Read Audio File.vim -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Seek Audio File.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Seek Audio File.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Files/Write Audio File.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Files/Write Audio File.vim -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Audio Processing/Channel Conversion.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Audio Processing/Channel Conversion.vim -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Audio Device Advanced Config.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Audio Device Advanced Config.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Audio Device Config.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Audio Device Config.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Audio Device Format.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Audio Device Format.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Audio Device Info.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Audio Device Info.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Audio Device Native Data Format.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Audio Device Native Data Format.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Audio Device Refnum.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Audio Device Refnum.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Audio Device Type.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Audio Device Type.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Audio File Codec.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Audio File Codec.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Audio File Image Type.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Audio File Image Type.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Audio File Image.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Audio File Image.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Audio File Info.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Audio File Info.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Audio File Refnum.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Audio File Refnum.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Audio File Tag.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Audio File Tag.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Backends.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Backends.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/Text Encoding.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/Text Encoding.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/WAV Codec Specific Info.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/WAV Codec Specific Info.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/WAV Container Format.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/WAV Container Format.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Controls/WAV Data Format.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Controls/WAV Data Format.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Audio Capture Example.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Audio Capture Example.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Audio File Tags Example.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Audio File Tags Example.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Audio Loopback Example.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Audio Loopback Example.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Audio Playback Example.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Audio Playback Example.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/IEEE Float Compare Example.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/IEEE Float Compare Example.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/LINX/Audio Playback Example (LINX).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/LINX/Audio Playback Example (LINX).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/LINX/Sample Pad Example (LINX).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/LINX/Sample Pad Example (LINX).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Media Player Example.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Media Player Example.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Minimize Memory Example.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Minimize Memory Example.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Mixer Example.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Mixer Example.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Music Visualizer Example.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Music Visualizer Example.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Playback Latency Compare Example.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Playback Latency Compare Example.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Query Audio Devices Example.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Query Audio Devices Example.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Sample Pad Example (Arduino Controller).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Sample Pad Example (Arduino Controller).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Sample Pad Example.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Sample Pad Example.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/01-snare.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/01-snare.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/02-kick.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/02-kick.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/03-tom.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/03-tom.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/04-tom.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/04-tom.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/05-tom.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/05-tom.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/06-drop.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/06-drop.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/07-ringring.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/07-ringring.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/08-dialup.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/08-dialup.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/09-boing.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/09-boing.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/10-chicken.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/10-chicken.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/11-wilhelm.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/11-wilhelm.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/12-vroom.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/12-vroom.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/13-jump.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/13-jump.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/14-lazer.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/14-lazer.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/15-powerup.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/15-powerup.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/16-fanfare.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Samples/Sample Pad Example/16-fanfare.flac -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/SubVIs/Generate Signal Components.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/SubVIs/Generate Signal Components.vim -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/SubVIs/Music Visualizer (Queue Only).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/SubVIs/Music Visualizer (Queue Only).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Examples/Write Audio File Example.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Examples/Write Audio File Example.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Channel/Community/Clear.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Channel/Community/Clear.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Channel/Community/Init.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Channel/Community/Init.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Channel/Community/Load.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Channel/Community/Load.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Channel/Community/Pause.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Channel/Community/Pause.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Channel/Community/Play.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Channel/Community/Play.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Channel/Community/Read Audio Data.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Channel/Community/Read Audio Data.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Channel/Community/Read Status.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Channel/Community/Read Status.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Channel/Community/Stop.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Channel/Community/Stop.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Channel/Community/Unload.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Channel/Community/Unload.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Channel/Community/Write Volume.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Channel/Community/Write Volume.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Channel/Controls/Channel State.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Channel/Controls/Channel State.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Channel/Controls/Channel Status.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Channel/Controls/Channel Status.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Channel/Private/Load Async.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Channel/Private/Load Async.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Channel/Private/Write Channel State.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Channel/Private/Write Channel State.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Channel Load.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Channel Load.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Channel Pause.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Channel Pause.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Channel Play.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Channel Play.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Channel Stop.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Channel Stop.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Channel Unload.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Channel Unload.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Channel Volume.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Channel Volume.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Clear.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Clear.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Controls/Command.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Controls/Command.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Controls/Message.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Controls/Message.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Controls/Mixer Audio Data Type.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Controls/Mixer Audio Data Type.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Init.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Init.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Polymorphic VIs/Channel Load (Path).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Polymorphic VIs/Channel Load (Path).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Polymorphic VIs/Channel Load (UTF-8).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Polymorphic VIs/Channel Load (UTF-8).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Private/Channel In Range.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Private/Channel In Range.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Private/Channel Load (Core).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Private/Channel Load (Core).vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Private/Process Messages.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Private/Process Messages.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Private/Run.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Private/Run.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Private/Start.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Private/Start.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Read Channel Status.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Read Channel Status.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Mixer/Mixer/Read Mixed Audio Data Queue.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Mixer/Mixer/Read Mixed Audio Data Queue.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Assert Supported Audio Type.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Assert Supported Audio Type.vim -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Audio Data Format To ma_format.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Audio Data Format To ma_format.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Audio Data To Interleaved Sample Data.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Audio Data To Interleaved Sample Data.vim -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Audio Data Type Enum.ctl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Audio Data Type Enum.ctl -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Audio Device Refnum To Value.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Audio Device Refnum To Value.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Audio File Refnum To Value.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Audio File Refnum To Value.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Check Audio Device Already Configured.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Check Audio Device Already Configured.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Copy Data.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Copy Data.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/DEVICE_ID_LENGTH.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/DEVICE_ID_LENGTH.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/DVR Read.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/DVR Read.vim -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/DVR Write.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/DVR Write.vim -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Debug Path.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Debug Path.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Get Audio Data Type.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Get Audio Data Type.vim -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Get Audio Device Info.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Get Audio Device Info.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Get Basic Audio File Info.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Get Basic Audio File Info.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Get Configured Audio Device ID.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Get Configured Audio Device ID.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Get Configured Audio Devices.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Get Configured Audio Devices.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Get Configured Backend.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Get Configured Backend.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Interleaved Sample Data To Audio Data.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Interleaved Sample Data To Audio Data.vim -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/MAX_DEVICES.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/MAX_DEVICES.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/NATIVE_DATA_FORMAT_COUNT.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/NATIVE_DATA_FORMAT_COUNT.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Path To UTF-8 String.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Path To UTF-8 String.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Result To Error.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Result To Error.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/UTF-8 To UTF-16.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/UTF-8 To UTF-16.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Value To Audio Device Refnum.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Value To Audio Device Refnum.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/Value To Audio File Refnum.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/Value To Audio File Refnum.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/Private/ma_format To Audio Data Format.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/Private/ma_format To Audio Data Format.vi -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/lib/LINX/g_audio_32.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/lib/LINX/g_audio_32.so -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/lib/g_audio_32.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/lib/g_audio_32.dll -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/lib/g_audio_64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/lib/g_audio_64.dll -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/lib/g_audio_64.framework.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/lib/g_audio_64.framework.zip -------------------------------------------------------------------------------- /src/LabVIEW/G-Audio/lib/g_audio_64.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/G-Audio/lib/g_audio_64.so -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/flac/44100-16-1ch-fb2k-decoded.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/flac/44100-16-1ch-fb2k-decoded.wav -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/flac/44100-16-1ch.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/flac/44100-16-1ch.flac -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/flac/44100-16-2ch-fb2k-decoded.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/flac/44100-16-2ch-fb2k-decoded.wav -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/flac/44100-16-2ch.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/flac/44100-16-2ch.flac -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/mp3/44100-16-1ch-CBR-320-fb2k-decoded.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/mp3/44100-16-1ch-CBR-320-fb2k-decoded.wav -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/mp3/44100-16-1ch-CBR-320.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/mp3/44100-16-1ch-CBR-320.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/mp3/44100-16-1ch-V0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/mp3/44100-16-1ch-V0.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-fb2k-decoded.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-fb2k-decoded.wav -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-apev2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-apev2.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-id3v1-apev2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-id3v1-apev2.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-id3v1-id3v2-apev2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-id3v1-id3v2-apev2.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-id3v1-id3v2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-id3v1-id3v2.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-id3v1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-id3v1.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-id3v2-apev2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-id3v2-apev2.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-id3v2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-id3v2.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-none.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320-tags-none.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/mp3/44100-16-2ch-CBR-320.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/apev2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/apev2.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/id3v1-apev2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/id3v1-apev2.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/id3v1-id3v2-apev2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/id3v1-id3v2-apev2.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/id3v1-id3v2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/id3v1-id3v2.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/id3v1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/id3v1.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/id3v2-apev2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/id3v2-apev2.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/id3v2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/id3v2.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/none.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/none.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/pictures.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/pictures.bmp -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/pictures.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/pictures.flac -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/pictures.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/pictures.gif -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/pictures.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/pictures.jpg -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/pictures.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/pictures.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/pictures.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/pictures.ogg -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/pictures.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/pictures.png -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/riff.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/riff.wav -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/unicode-tags.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/unicode-tags.flac -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/unicode-tags.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/unicode-tags.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/unicode-tags.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/unicode-tags.ogg -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/vorbis.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/vorbis.flac -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/tags/vorbis.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/tags/vorbis.ogg -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/unicode/utf-8.txt: -------------------------------------------------------------------------------- 1 | ユニコード.flac 2 | ユニコード.mp3 3 | ユニコード.ogg 4 | ユニコード.wav -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/unicode/ユニコード.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/unicode/ユニコード.flac -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/unicode/ユニコード.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/unicode/ユニコード.mp3 -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/unicode/ユニコード.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/unicode/ユニコード.ogg -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/unicode/ユニコード.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/unicode/ユニコード.wav -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/vorbis/44100-16-1ch-q10-fb2k-decoded.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/vorbis/44100-16-1ch-q10-fb2k-decoded.wav -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/vorbis/44100-16-1ch-q10.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/vorbis/44100-16-1ch-q10.ogg -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/vorbis/44100-16-2ch-q10-fb2k-decoded.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/vorbis/44100-16-2ch-q10-fb2k-decoded.wav -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/vorbis/44100-16-2ch-q10.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/vorbis/44100-16-2ch-q10.ogg -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/wav/44100-16-1ch.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/wav/44100-16-1ch.wav -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Resources/wav/44100-16-2ch.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Resources/wav/44100-16-2ch.wav -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Configure Audio Device Duplicate.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Configure Audio Device Duplicate.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Default Audio Device Capture.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Default Audio Device Capture.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Default Audio Device Playback.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Default Audio Device Playback.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test File Info FLAC.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test File Info FLAC.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test File Info MP3.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test File Info MP3.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test File Info Vorbis.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test File Info Vorbis.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test File Info WAV.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test File Info WAV.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Get Audio Device Configuration.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Get Audio Device Configuration.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Load FLAC.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Load FLAC.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Load MP3.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Load MP3.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Load Vorbis.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Load Vorbis.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Load WAV.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Load WAV.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Minimal Audio Device Capture.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Minimal Audio Device Capture.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Minimal Audio Device Playback.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Minimal Audio Device Playback.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Open Read Close FLAC.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Open Read Close FLAC.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Open Read Close MP3.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Open Read Close MP3.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Open Read Close Vorbis.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Open Read Close Vorbis.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Open Read Close WAV.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Open Read Close WAV.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Open Write Close WAV.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Open Write Close WAV.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Query Audio Backends.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Query Audio Backends.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Seek Position FLAC.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Seek Position FLAC.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Seek Position MP3.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Seek Position MP3.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Seek Position Vorbis.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Seek Position Vorbis.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Seek Position WAV.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Seek Position WAV.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Tag Read FLAC.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Tag Read FLAC.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Tag Read ID3v1.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Tag Read ID3v1.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Tag Read ID3v2.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Tag Read ID3v2.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Tag Read Pictures FLAC.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Tag Read Pictures FLAC.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Tag Read Pictures MP3.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Tag Read Pictures MP3.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Tag Read Pictures Vorbis.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Tag Read Pictures Vorbis.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Tag Read Vorbis.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Tag Read Vorbis.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Tag Read WAV.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Tag Read WAV.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Unicode Path UTF8.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Unicode Path UTF8.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Unicode Tag FLAC.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Unicode Tag FLAC.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Unicode Tag ID3v2.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Unicode Tag ID3v2.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Test Unicode Tag Vorbis.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Test Unicode Tag Vorbis.vi -------------------------------------------------------------------------------- /src/LabVIEW/Unit Tests/Waveform Array In Range Comparison.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/Unit Tests/Waveform Array In Range Comparison.vim -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/Generate Post-Install.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/Generate Post-Install.vi -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/Post-Install Custom Action.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/Post-Install Custom Action.vi -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/Pre-Uninstall Custom Action.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/Pre-Uninstall Custom Action.vi -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/dataflow_g_lib_g_audio-0.1.0.1.vip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/dataflow_g_lib_g_audio-0.1.0.1.vip -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/dataflow_g_lib_g_audio-0.2.0.1.vip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/dataflow_g_lib_g_audio-0.2.0.1.vip -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/dataflow_g_lib_g_audio-0.2.1.1.vip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/dataflow_g_lib_g_audio-0.2.1.1.vip -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/dataflow_g_lib_g_audio-0.3.0.1.vip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/dataflow_g_lib_g_audio-0.3.0.1.vip -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/dataflow_g_lib_g_audio-0.3.1.1.vip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/dataflow_g_lib_g_audio-0.3.1.1.vip -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/dataflow_g_lib_g_audio-0.4.0.1.vip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/dataflow_g_lib_g_audio-0.4.0.1.vip -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/icon.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/icon.pdn -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/icon.png -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/palette-icon-devices.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/palette-icon-devices.pdn -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/palette-icon-devices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/palette-icon-devices.png -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/palette-icon-examples.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/palette-icon-examples.pdn -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/palette-icon-examples.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/palette-icon-examples.png -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/palette-icon-files.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/palette-icon-files.pdn -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/palette-icon-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/palette-icon-files.png -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/palette-icon-linx.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/palette-icon-linx.pdn -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/palette-icon-linx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/palette-icon-linx.png -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/palette-icon-mixer.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/palette-icon-mixer.pdn -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/palette-icon-mixer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/palette-icon-mixer.png -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/palette-icon.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/palette-icon.pdn -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/palette-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/palette-icon.png -------------------------------------------------------------------------------- /src/LabVIEW/VIPM/vipm-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataflowg/g-audio/a69edc673e2b1e165ca9846202e5a44b2c890625/src/LabVIEW/VIPM/vipm-screenshot.png --------------------------------------------------------------------------------