Zach Pomerantz
df051ff8df
maintain network audio in int16_t
2017-01-20 18:37:46 -05:00
Zach Pomerantz
685483b924
do not omit local audio when echoing server audio
2017-01-20 17:52:03 -05:00
Zach Pomerantz
bb247fe8a3
rename AudioMixRingBuffer
2017-01-20 14:48:54 -05:00
Zach Pomerantz
280ed04f74
fix unused warning for channel up/downmix
2017-01-20 14:43:41 -05:00
Zach Pomerantz
5927c089ac
use AudioRingMixBuffer as LocalInjectorsStream
2017-01-20 12:29:44 -05:00
Zach Pomerantz
4f7f3c2a60
mv localInjectorsBuffer to float-based localInjectorsStream
...
The localInjectorsBuffer is based on
AudioRingBuffer, which only accounts for int16_t.
Local injectors are mixed, and so they can exceed
std::numeric_limits<int16_t> before limiting.
This will allow them to remain as float until
limiting (in the device callback) - once the new
stream is implemented.
2017-01-20 12:29:44 -05:00
Zach Pomerantz
c5415f9624
clean audio client logs
2017-01-20 12:29:44 -05:00
Zach Pomerantz
7261b5285e
omit all injector samples on server echo
2017-01-20 12:29:44 -05:00
Zach Pomerantz
492795f7e5
audio client cosmetics
2017-01-20 12:29:44 -05:00
Zach Pomerantz
4c7c7ee3cc
mv audio injector preparation to own thread
2017-01-20 12:29:44 -05:00
Zach Pomerantz
d7085ec685
add audio helpers convertToMix/Scratch
2017-01-20 12:29:44 -05:00
Zach Pomerantz
d1673e554f
simplify audio bytesWritten computation
2017-01-20 12:29:44 -05:00
Zach Pomerantz
0f08abfa14
fix bug in audio samples popped check
2017-01-20 12:29:44 -05:00
Zach Pomerantz
61f7f72c5e
simplify resampling
2017-01-20 12:29:44 -05:00
Zach Pomerantz
42f5af7c39
improve audiostream debug logs
2017-01-20 12:29:44 -05:00
Zach Pomerantz
969d776e1f
queue injector audio after device callbacks
...
Conflicts:
libraries/audio-client/src/AudioClient.cpp
2017-01-20 12:29:44 -05:00
Zach Pomerantz
dee5f63037
rename audio mix/scratch buffers
...
Conflicts:
libraries/audio-client/src/AudioClient.cpp
libraries/audio-client/src/AudioClient.h
2017-01-20 12:29:44 -05:00
Zach Pomerantz
0f1ec63b17
enable injectors in audio device callback
2017-01-20 12:29:44 -05:00
Zach Pomerantz
3a0d874bb5
add injector ring buffer to audio client
2017-01-20 12:29:44 -05:00
Zach Pomerantz
a7ecf41a42
add audio limiting to device callback
2017-01-20 12:29:44 -05:00
Zach Pomerantz
24d53ea13c
rm audio output limiting
2017-01-20 12:29:44 -05:00
Zach Pomerantz
ebe96f9b25
rm injectors from mixed audio processing
2017-01-20 12:29:44 -05:00
Ken Cooke
42e13d1e97
Fix audio failures on systems that return incorrect/unsupported mixFormat
2017-01-14 10:26:13 -08:00
David Kelly
b68a07e930
Merge pull request #9197 from davidkelly/dk/injectorVolume
...
No longer applying volume when reading audio injector buffer
2016-12-16 15:11:33 -08:00
David Kelly
a8157ae2cd
Typo, plus some CR feedback
2016-12-13 17:48:30 -08:00
Zach Fox
7030c7b0a6
Space bubble improvements ( #9142 )
...
* The space bubble around a player's avatar is now visualized. When another avatar enters a player's bubble, The bubble visualization will appear, a soft tone will play, and the "Bubble" HUD button will flash.
* The space bubble radius setting has been removed. Space bubble size now scales based on avatar scale.
* Space bubble collision detection is now more accurate and reliable.
* CTRL + N toggles the bubble.
* The "Bubble" HUD button has been moved to the proper location.
2016-12-12 14:22:54 -08:00
David Kelly
3f3d922eca
No longer applying volume when reading audio injector buffer
...
Since we also apply the gain in HRTF (on both server and client), the
mono sources sort of had volume^2 applied to them.
2016-12-12 12:01:02 -08:00
Ken Cooke
e4b5c14ea3
PR feedback
2016-12-07 10:15:55 -08:00
Ken Cooke
9831d874b5
Remove debugging code
2016-12-06 10:22:58 -08:00
Ken Cooke
975cbd8e44
Replace test renderer with spatialized binaural renderer
2016-12-06 10:12:36 -08:00
Ken Cooke
e93e1a7c4f
Preliminary support for Ambisonic audio injectors.
...
Supports 4-channel WAV files, presumed to be B-format (FuMa) first-order Ambisonic.
Supports WAV with arbitrary sample rate (needs optimization).
Supports soundfield volume and orientation set via script.
Supports localOnly client-side injection using simple (non-spatialized) test renderer.
2016-12-02 18:20:57 -08:00
Ken Cooke
d69d77d0ee
Refactor the audio device format detection. Only use the native format when Qt can correctly determine it.
2016-11-21 21:36:17 -08:00
Ken Cooke
fd08936fb3
Improved failure logs
2016-11-17 13:42:43 -08:00
Ken Cooke
ec53c6a030
Add support for mono or multichannel audio output.
...
At the end of the audio pipeline, optional upmix/downmix to the device channel format.
2016-11-17 06:56:49 -08:00
Ken Cooke
b19a44e046
On Windows, set audio format to match the internal mix format.
...
This works around multichannel bugs in the Qt audio framework.
2016-11-15 10:37:32 -08:00
Ken Cooke
30c189e624
channelCount math cleanup
2016-11-15 09:10:05 -08:00
Seth Alves
137730dc50
coding standard
2016-11-01 11:59:28 -07:00
Seth Alves
ae17135a07
lock around quit flag to avoid shutdown race
2016-11-01 11:14:16 -07:00
Seth Alves
3903a51062
fix a couple of crash-on-exits
2016-10-25 13:58:48 -07:00
Clément Brisset
b63eb6ba9f
Merge pull request #8665 from zzmp/feat/audio-stats
...
move audio stats to QML/JS, with graphs
2016-10-20 16:43:49 -07:00
Anthony J. Thibault
350977f03e
Speculative fix for crash in AudioClient
2016-10-11 10:49:43 -07:00
Zach Pomerantz
5af95c6062
store channels on audio stream
2016-10-05 12:04:24 -07:00
Zach Pomerantz
972a611d03
retain stereo on dead audio resampling
2016-10-04 17:54:20 -07:00
Ken Cooke
8491254664
Merge branch 'master' of https://github.com/highfidelity/hifi into audio-fixes2
2016-10-03 18:13:43 -07:00
Ken Cooke
46526a309d
Increase audio input buffering on Windows 7
2016-10-03 17:46:09 -07:00
Chris Collins
ca1a7135eb
Merge pull request #8706 from kencooke/audio-fixes
...
Improve support for audio when input rate != output rate
2016-10-03 16:46:56 -07:00
Ken Cooke
9590d2eef9
Fix support for audio when input rate != output rate
2016-10-03 09:08:32 -07:00
Clément Brisset
02991bffab
Merge pull request #8687 from zzmp/feat/injector-loopback
...
loopback local injectors on server echo
2016-09-30 11:21:10 -07:00
Zach Pomerantz
768354e49f
loopback local injectors on server echo
2016-09-29 15:25:17 -07:00
Ken Cooke
858297241b
Even lower audio latency
2016-09-29 12:48:21 -07:00
Zach Pomerantz
efb71c18a1
expose audio injector streams
2016-09-26 18:51:53 -07:00
Zach Pomerantz
055fabf57b
fix audio AppendFlag semantics
2016-09-26 18:51:51 -07:00
Zach Pomerantz
dbe3104f09
fix -Wreorder
2016-09-26 17:23:18 -07:00
Zach Pomerantz
f5e1d4dd2b
notify on audio stream changes
2016-09-26 15:38:21 -07:00
Zach Pomerantz
b9c4018b8e
expose AudioStats to qml/js
2016-09-26 15:35:29 -07:00
Zach Pomerantz
81b6bb3a2d
rm unused DEFAULT_GATE_THRESHOLD
2016-09-21 18:04:07 -07:00
Zach Pomerantz
e2ff738fc3
strip unused audio settings
...
- remove parameters on the jitter buffer algorithm, these are now static
- remove parameters on the output starve detection algorithm, now static
- move interface audio settings to the Developer menu
2016-09-21 17:35:27 -07:00
Ken Cooke
b14f43b11e
Merge pull request #8610 from zzmp/test/audio-jitter
...
add audio jitter simulator testing tool
2016-09-21 16:43:36 -07:00
Chris Collins
3d9f231543
Merge pull request #8609 from zzmp/fix/audio-stats
...
fix audio network stats
2016-09-19 09:08:35 -07:00
Zach Pomerantz
b6d093889c
add AudioConstants::SAMPLE_SIZE
2016-09-16 14:20:50 -07:00
Zach Pomerantz
45b306fc97
fix preference for jitter sim
2016-09-16 12:14:57 -07:00
Zach Pomerantz
80bce953f7
justify jitter simulation
2016-09-16 11:40:37 -07:00
Zach Pomerantz
177466e4c7
calculate unplayed ms on all streams/buffers as max
2016-09-15 17:54:41 -07:00
Zach Pomerantz
53f5899a69
add audio jitter simulator
2016-09-15 14:51:39 -07:00
Zach Pomerantz
9792d025fa
clean up audio stats
2016-09-15 13:09:06 -07:00
Seth Alves
4470338663
catagorize some qDebugs
2016-09-14 21:39:45 -07:00
Ken Cooke
ad97a15e8b
Handle another case when resampling is not needed
2016-09-14 09:54:15 -07:00
Ken Cooke
e82d751dac
Fix typo
2016-09-14 08:25:41 -07:00
Ken Cooke
25920732ec
Remove unused buffer
2016-09-14 08:23:53 -07:00
Ken Cooke
96313a421c
Cleanup the confusion of using null-resampler for channel conversion
2016-09-14 08:22:18 -07:00
Ken Cooke
c555e369c8
Handle the case when resampling is not needed
2016-09-14 06:37:09 -07:00
Ken Cooke
27d24eb79b
Fix compiler warning
2016-09-13 20:56:36 -07:00
Ken Cooke
ed9061040a
Better Android settings
2016-09-13 20:16:23 -07:00
Ken Cooke
f1455ab157
Remove unneeded buffers
2016-09-13 20:06:44 -07:00
Ken Cooke
724df38df0
Optimize the audio pipeline. Use float mixBuffer and apply reverb at 24khz
2016-09-13 16:11:06 -07:00
Brad Hefta-Gaub
7c3c05a450
Merge pull request #8584 from zzmp/fix/audio-starve-detection
...
fix audio client starve detection
2016-09-13 09:08:20 -07:00
Zach Pomerantz
e785c0cdf8
add test for audio jitter
2016-09-08 17:50:11 -07:00
Zach Pomerantz
2a2673d898
bring audio starve check to standard
2016-09-08 15:26:09 -07:00
Zach Pomerantz
d7643ef2a0
fix audio client starve detection
2016-09-08 14:25:33 -07:00
Ken Cooke
1a6af49b3d
Support for even more back-end sample rates
2016-08-30 16:10:11 -07:00
Ken Cooke
cb5bded7c1
Add support for more back-end sample rates
2016-08-30 14:37:33 -07:00
Ken Cooke
9187b4aa7d
More complete fix for audio threading failures. Qt keeps an internal Q_GLOBAL_STATIC list of devices, which is referenced at device start() but clobbered by availableDevices(). Now protected by a mutex.
2016-08-30 12:57:29 -07:00
Ken Cooke
d2b33e00bd
Fix audio startup failures. Directly calling the static method QAudioDeviceInfo::availableDevices() was not thread-safe.
2016-08-30 10:13:08 -07:00
Ken Cooke
28a99a7a03
Merge branch 'master' of https://github.com/highfidelity/hifi into low-latency-audio
2016-08-29 12:38:17 -07:00
Ken Cooke
1ab35797b1
Drastically reduce the audio capture buffering on Windows.
...
With device detection on another thread and WASAPI back-end, the large capture buffer (resulting from CALLBACK_ACCELERATOR_RATIO) is no longer needed.
2016-08-25 16:09:25 -07:00
Ken Cooke
c0caea1ffd
PR feedback
2016-08-24 10:32:29 -07:00
Ken Cooke
b4d143fe13
PR feedback
2016-08-24 10:19:09 -07:00
Ken Cooke
8fbf5a9e8b
PR feedback
2016-08-24 10:16:43 -07:00
Ken Cooke
4b2778f02d
Re-implement the continuous detection of device changes for all platforms, using a background thread. This prevents the glitches caused by calling checkDevices() on the audio processing thread.
2016-08-20 12:22:47 -07:00
Ken Cooke
3583bdecbb
Fix for calculateDeviceToNetworkInputRatio() which was completely broken.
...
Running the audio back-end at 44.1k now works correctly.
2016-08-18 16:56:26 -07:00
Seth Alves
87dbfa7e47
add -Wsuggest-override to compile flags and deal with fallout
2016-08-18 09:51:41 -07:00
Ken Cooke
7202d132c5
Remove 22050 from the preferred list of back-end sample rates.
2016-08-16 16:57:28 -07:00
Ken Cooke
2326696d54
Disabled the continuous polling for audio device changes on Windows.
...
It necessitated extra buffering to prevent periodic dropouts in the audio stream.
2016-08-16 16:53:51 -07:00
Brad Hefta-Gaub
ca3a194454
implment coded renegotiation in client if for some reason unexpected audio codecs come in to inbound stream
2016-08-02 15:30:03 -07:00
Brad Hefta-Gaub
20824f038c
include codec in audio stream packets so that each side can discard packets that don't match
2016-07-18 21:59:44 -07:00
David Kelly
3df373252f
Several minor things
...
We could only partially fill the _scratchBuffer - .wav files may not
be exactly N frames long. Doh.
While at it, I needed to call finishLocalInjection() after local
injectors are done, and the access to the injector vector needs to
be locked, given that we do a QtDirectConnection with the networking
and thus the outputLocalInjectors is on a different thread.
The clicking was just 0-ing out the _scratchBuffer.
2016-07-18 14:00:41 -07:00
Brad Hefta-Gaub
dc2741950a
Merge pull request #8259 from kencooke/improved-hrtf
...
Fix the AudioMixer distance attenuation.
2016-07-15 22:36:51 -07:00
Ken Cooke
1ee608ad2c
Cleanup
2016-07-15 18:23:12 -07:00
Brad Hefta-Gaub
878a01cbaf
Merge pull request #8242 from kencooke/improved-hrtf
...
Improved HRTF
2016-07-15 09:02:15 -07:00
Ken Cooke
2674df6095
Fix the distance-attenuation model (for injectors only)
...
The original attenuation model seems wrong, under-attenuating at close distance but completely muting after 45m.
This uses a physics-based model of -6dB per doubling of distance in free space, for the injectors. The AudioMixer model and domain settings still need to be reworked in a future PR.
2016-07-14 18:34:07 -07:00
Brad Davis
44500889f8
Remove 'updating reverb' logspam
2016-07-14 13:34:56 -07:00
Ken Cooke
7a4bdc1779
enable in Interface and AudioMixer, by passing distance between source and listener
2016-07-14 11:30:55 -07:00
Ken Cooke
d7399f5781
Improved HRTF.
...
Adds a distance filter to model the frequency-dependent attenuation of sound propagation in open air.
Optimized using SIMD and computing all biquads in parallel. Performance impact is almost zero.
Filter updates are continuously interpolated and clean to -90dB.
Not enabled yet (distance hardcoded to 0.0f)
2016-07-14 10:34:42 -07:00
Chris Collins
1c6b5e89ac
Merge pull request #8239 from ZappoMan/codecPlugins
...
fix razor blades in your ears when switching between domains with no codecs installed
2016-07-13 17:25:47 -07:00
Brad Hefta-Gaub
a267843e3e
fix razor blades in your ears when switching between domains with no codecs installed
2016-07-13 16:37:30 -07:00
David Kelly
dde4d16759
Merge branch 'master' of github.com:highfidelity/hifi into dk/firstLameAttempt
2016-07-13 15:15:35 -07:00
David Kelly
c951f507e3
Fixed issue with calling setOptions
...
Since the stereo option is computed from the .wav file, if you call
setOptions later (like the cow.js does), it resets stereo to false.
So, I now just copy the stereo flag into the new options, since the
sound file is the same.
Also, calling AudioClient::outputLocalInjector on the AudioClient
thread now to avoid potential concurrency issues accessing the
vector of injectors.
2016-07-13 11:28:36 -07:00
David Kelly
3955e03aa2
Fix for build error
...
doh!
2016-07-12 12:15:12 -07:00
Brad Hefta-Gaub
71b6210c4e
removed some log spam
2016-07-12 10:18:37 -07:00
David Kelly
c84ef5f626
Stereo injectors now handled same as mono
...
Except of course no HRTF.
2016-07-11 11:31:47 -07:00
David Kelly
4f80c77b77
PR feedback
...
simple enough - not sure why I had an issue with this in the first
place.
2016-07-11 10:36:55 -07:00
David Kelly
46dc5bea04
cleanup from PR comments
2016-07-11 09:31:05 -07:00
David Kelly
80d33ee251
Working now as frame-at-a-time
...
So localOnly sounds get HRTF'd, one network frame at a time. Less
processing (upsampling, limiting, etc...) than doing this at the
end of the pipeline (in the AudioOutputIODevice::readData call).
2016-07-11 09:11:23 -07:00
Brad Hefta-Gaub
ed9715ae5f
some cleanup, proper memory allocation/deallocation
2016-07-10 17:40:58 -07:00
Brad Hefta-Gaub
ba6bb24595
rework plugins to allow different decoder/encoder instances per streams
2016-07-10 16:49:03 -07:00
Brad Hefta-Gaub
a71baf5601
handle codec prioritization, handle multiple codec choices
2016-07-08 21:18:03 -07:00
Brad Hefta-Gaub
126e5c2926
codec pipeline working, zlib example
2016-07-08 14:34:44 -07:00
David Kelly
bc7123d701
comment out logging for now
2016-07-08 13:59:49 -07:00
David Kelly
7a9b3978e9
Better processing of audio
...
A couple things Ken suggested. First off, there are now AudioSRC
calls for floats, which simplfied stuff a bit. Then, I switched to
grabbing network packets first, and only pulling at most that amount
of audio from the local injectors. That improves things - the
occasional artifacts (when the injectors got more data than the
network for instance) are gone.
Also, fixed build issue (unused variable warning) for mac and android.
2016-07-08 13:01:06 -07:00
Brad Hefta-Gaub
3c6447326e
more codec plumbing
2016-07-07 21:24:24 -07:00
David Kelly
600348bf10
Initial cut of htrf for mono localOnly injectors
...
Probably need to clean up a bit, but wanted to get this out there
for comment on more general issues, etc...
To test, I added a localOnly: true to the cow in the tutorial.
2016-07-07 16:07:41 -07:00
Brad Hefta-Gaub
9333c7dcca
Merge branch 'master' of https://github.com/highfidelity/hifi into codecPlugins
2016-07-06 13:26:19 -07:00
Brad Hefta-Gaub
7a4b11ee97
more work on codecs
2016-06-27 13:06:19 -07:00
Brad Hefta-Gaub
d7bffc3eab
first cut at negotiating codecs
2016-06-23 17:14:41 -07:00
Brad Hefta-Gaub
6111e4952a
fix comments
2016-06-23 10:59:26 -07:00
Brad Hefta-Gaub
be37921845
first cut at codec plugins
2016-06-23 10:42:02 -07:00
Brad Hefta-Gaub
c0be9aec6a
cleanup the callers of the resamplers for mic to net and net to speaker, remove loopback resampler
2016-06-23 10:28:29 -07:00
Brad Davis
97e96f7b67
PR comments
2016-03-31 13:19:26 -07:00
Brad Hefta-Gaub
2381ab1cba
Merge pull request #7496 from kencooke/master
...
make self-reverb depend on wetDryMix
2016-03-30 15:44:20 -07:00
Ken Cooke
a51cc9d12a
make self-reverb depend on wetDryMix
2016-03-28 16:04:45 -07:00
Atlante45
92ef8cafb1
Make sure pos/rot getters don't crash
2016-03-28 14:37:06 -07:00
Ken Cooke
c6ca984782
Fix Reverb Zone settings to work correctly with new reverb.
2016-03-24 12:59:52 -07:00
Brad Hefta-Gaub
bb1ed2147f
revert change that trusted Qt's claim that it supports the format
2016-02-22 11:22:03 -08:00
howard-stearns
e21d9042d0
Remove some logging.
2016-02-19 13:34:06 -08:00
howard-stearns
adb33e7dca
Up default initial buffer frame size to the value from before.
2016-02-18 16:32:18 -08:00
howard-stearns
162be13914
Don't keep adding signal connections. More logging.
2016-02-18 16:14:03 -08:00
howard-stearns
547d3d6b9a
Merge branch 'audio-output-buffer' of https://github.com/howard-stearns/hifi into audio-output-buffer
2016-02-17 13:57:21 -08:00
howard-stearns
b8b1565470
Don't fake-fail the format test. Trust the os.
2016-02-17 13:46:48 -08:00
Howard Stearns
983a0ccb9b
Change internal preference names so that old users pick up the new default values, and change name in dialog.
2016-02-16 18:00:39 -08:00
howard-stearns
d328b82c3c
Default output buffer size is 1 frame, and automatic updates don't persist
...
changes (just in-memory).
2016-02-16 12:09:44 -08:00
Howard Stearns
4255b1f9aa
Change output buffer size on correct thread, and turn on automatic resizing on all platforms instead of just mac.
2016-02-16 11:22:01 -08:00
Stephen Birarda
445662f5ae
clean sweep of old now unused audio files
2016-02-08 15:38:12 -08:00
Atlante45
ce51350b65
Fix warnings on windows 64bit
2015-12-11 15:42:15 -08:00
Ken Cooke
4803b3bd9f
Merge branch 'master' of https://github.com/highfidelity/hifi into audio-reverb
2015-12-07 13:08:21 -08:00
Ken Cooke
8683bb5002
New reverb parameters
2015-12-07 13:05:30 -08:00
Ryan Huffman
89c412c324
Merge branch 'master' of https://github.com/highfidelity/hifi into proto-received-message
2015-12-04 11:38:28 -08:00
Ken Cooke
aad4743bf0
Completely remove Gverb from cmake
2015-12-03 18:06:50 -08:00
Ken Cooke
a5b64473af
Fix bugs
2015-11-25 16:15:04 -08:00
Ryan Huffman
07d21514c5
Merge branch 'master' of https://github.com/highfidelity/hifi into proto-received-message
2015-11-19 10:47:37 -08:00
Ken Cooke
3060aa960d
Fix the case when local-echo and self-reverb both active
2015-11-19 09:23:58 -08:00