HEnquist / wasapi-rs

Simple Wasapi bindings for Rust
MIT License
47 stars 12 forks source link

Loopback not capturing anything #25

Closed benaclejames closed 7 months ago

benaclejames commented 7 months ago

Not sure what I could be doing wrong here, but running the example loopback code does not appear to show any functionality or results. No audio is ever able to be captured from the loopback device. Is this just me?

HEnquist commented 7 months ago

Was the device actually playing any audio when you tried this? If the device is idle, then loopback capture doesn't provide any data.

benaclejames commented 7 months ago

It was, yes. Tried playing with spotify, and when I realized it could potentially be something to do with potential DRM, I tried closing it and using youtube instead. Got nothing on both attempts

HEnquist commented 7 months ago

What do the logs say?

benaclejames commented 7 months ago
2024-02-13T23:31:35.502757Z [TRACE] (3) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:381] name: Microphone (VIVE Virtual Audio Device)
2024-02-13T23:31:35.502999Z [DEBUG] (3) wasapi::api: default device Ok("Microphone (VIVE Virtual Audio Device)")
2024-02-13T23:31:35.525651Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:381] name: Speakers (3- USB Audio CODEC )
2024-02-13T23:31:35.5258086Z [DEBUG] (2) wasapi::api: default device Ok("Speakers (3- USB Audio CODEC )")                                                                                 
2024-02-13T23:31:35.5284468Z [DEBUG] (3) WasapiTest: Desired capture format: WaveFormat { nAvgBytesPerSec: 352800, cbSize: 22, nBlockAlign: 8, wBitsPerSample: 32, nSamplesPerSec: 44100, wFormatTag: 65534, wValidBitsPerSampl
e: 32, SubFormat: 00000003-0000-0010-8000-00AA00389B71, nChannel: 2, dwChannelMask: 3 }
2024-02-13T23:31:35.5285937Z [DEBUG] (2) WasapiTest: Desired playback format: WaveFormat { nAvgBytesPerSec: 352800, cbSize: 22, nBlockAlign: 8, wBitsPerSample: 32, nSamplesPerSec: 44100, wFormatTag: 65534, wValidBitsPerSamp
le: 32, SubFormat: 00000003-0000-0010-8000-00AA00389B71, nChannel: 2, dwChannelMask: 3 }
2024-02-13T23:31:35.5301698Z [TRACE] (3) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:558] default period 100000, min period 30000
2024-02-13T23:31:35.5302975Z [DEBUG] (3) WasapiTest: default period 100000, min period 30000
2024-02-13T23:31:35.5313753Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:558] default period 100000, min period 30000
2024-02-13T23:31:35.5315757Z [DEBUG] (2) WasapiTest: default period 100000, min period 30000
2024-02-13T23:31:35.5589648Z [DEBUG] (3) WasapiTest: initialized capture
2024-02-13T23:31:35.5592625Z [TRACE] (3) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:666] buffer_frame_count 974
2024-02-13T23:31:35.5638275Z [DEBUG] (2) WasapiTest: initialized playback
2024-02-13T23:31:35.5643289Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:666] buffer_frame_count 1036
2024-02-13T23:31:35.5648915Z [TRACE] (2) WasapiTest: [src\main.rs:45] New buffer frame count 1036
2024-02-13T23:31:35.5650352Z [DEBUG] (2) WasapiTest: need more samples
2024-02-13T23:31:35.5651816Z [WARN] no data, filling with zeros
2024-02-13T23:31:35.5655058Z [TRACE] (2) WasapiTest: [src\main.rs:70] write
2024-02-13T23:31:44.8955109Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:885] wrote 1036 frames
2024-02-13T23:31:44.8958098Z [TRACE] (2) WasapiTest: [src\main.rs:77] write ok
2024-02-13T23:31:44.8960229Z [TRACE] (3) WasapiTest: [src\main.rs:127] capturing
2024-02-13T23:31:44.896156Z [TRACE] (2) WasapiTest: [src\main.rs:45] New buffer frame count 1036
2024-02-13T23:31:44.8962782Z [DEBUG] (2) WasapiTest: need more samples
2024-02-13T23:31:44.896437Z [WARN] no data, filling with zeros
2024-02-13T23:31:44.8965291Z [TRACE] (3) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:1016] read 0 frames
2024-02-13T23:31:44.8966707Z [TRACE] (2) WasapiTest: [src\main.rs:70] write
2024-02-13T23:31:44.8967794Z [TRACE] (3) WasapiTest: [src\main.rs:127] capturing
2024-02-13T23:31:44.8968945Z [TRACE] (3) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:1016] read 0 frames
2024-02-13T23:31:44.8970158Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:885] wrote 1036 frames
2024-02-13T23:31:44.8971292Z [TRACE] (2) WasapiTest: [src\main.rs:77] write ok
2024-02-13T23:31:44.8997865Z [TRACE] (2) WasapiTest: [src\main.rs:45] New buffer frame count 441
2024-02-13T23:31:44.8999712Z [DEBUG] (2) WasapiTest: need more samples
2024-02-13T23:31:44.9000925Z [WARN] no data, filling with zeros
2024-02-13T23:31:44.9002416Z [TRACE] (2) WasapiTest: [src\main.rs:70] write
2024-02-13T23:31:44.9004075Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:885] wrote 441 frames
2024-02-13T23:31:44.9005272Z [TRACE] (2) WasapiTest: [src\main.rs:77] write ok
2024-02-13T23:31:44.9081308Z [TRACE] (3) WasapiTest: [src\main.rs:127] capturing
2024-02-13T23:31:44.9083856Z [TRACE] (3) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:1016] read 0 frames
2024-02-13T23:31:44.9090586Z [TRACE] (2) WasapiTest: [src\main.rs:45] New buffer frame count 441
2024-02-13T23:31:44.9091748Z [DEBUG] (2) WasapiTest: need more samples
2024-02-13T23:31:44.909278Z [WARN] no data, filling with zeros
2024-02-13T23:31:44.9094108Z [TRACE] (2) WasapiTest: [src\main.rs:70] write
2024-02-13T23:31:44.9095442Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:885] wrote 441 frames
2024-02-13T23:31:44.9096359Z [TRACE] (2) WasapiTest: [src\main.rs:77] write ok
2024-02-13T23:31:44.9197905Z [TRACE] (2) WasapiTest: [src\main.rs:45] New buffer frame count 441
2024-02-13T23:31:44.9199755Z [DEBUG] (2) WasapiTest: need more samples
2024-02-13T23:31:44.9201132Z [WARN] no data, filling with zeros
2024-02-13T23:31:44.9202518Z [TRACE] (2) WasapiTest: [src\main.rs:70] write
2024-02-13T23:31:44.9203795Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:885] wrote 441 frames
2024-02-13T23:31:44.9204713Z [TRACE] (2) WasapiTest: [src\main.rs:77] write ok
2024-02-13T23:31:44.9232605Z [TRACE] (3) WasapiTest: [src\main.rs:127] capturing
2024-02-13T23:31:44.9235385Z [TRACE] (3) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:1016] read 0 frames
2024-02-13T23:31:44.9290273Z [TRACE] (2) WasapiTest: [src\main.rs:45] New buffer frame count 441
2024-02-13T23:31:44.9292198Z [DEBUG] (2) WasapiTest: need more samples
2024-02-13T23:31:44.9293454Z [WARN] no data, filling with zeros
2024-02-13T23:31:44.9295042Z [TRACE] (2) WasapiTest: [src\main.rs:70] write
2024-02-13T23:31:44.9296823Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:885] wrote 441 frames
2024-02-13T23:31:44.9298069Z [TRACE] (2) WasapiTest: [src\main.rs:77] write ok
2024-02-13T23:31:44.9397675Z [TRACE] (2) WasapiTest: [src\main.rs:45] New buffer frame count 441
2024-02-13T23:31:44.9399352Z [DEBUG] (2) WasapiTest: need more samples
2024-02-13T23:31:44.9400641Z [WARN] no data, filling with zeros
2024-02-13T23:31:44.9402446Z [TRACE] (2) WasapiTest: [src\main.rs:70] write
2024-02-13T23:31:44.9404233Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:885] wrote 441 frames
2024-02-13T23:31:44.9405316Z [TRACE] (2) WasapiTest: [src\main.rs:77] write ok
2024-02-13T23:31:44.9490536Z [TRACE] (2) WasapiTest: [src\main.rs:45] New buffer frame count 441
2024-02-13T23:31:44.9492386Z [DEBUG] (2) WasapiTest: need more samples
2024-02-13T23:31:44.9494242Z [WARN] no data, filling with zeros
2024-02-13T23:31:44.9496019Z [TRACE] (2) WasapiTest: [src\main.rs:70] write
2024-02-13T23:31:44.9497793Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:885] wrote 441 frames
2024-02-13T23:31:44.949889Z [TRACE] (2) WasapiTest: [src\main.rs:77] write ok
2024-02-13T23:31:44.9547574Z [TRACE] (3) WasapiTest: [src\main.rs:127] capturing
2024-02-13T23:31:44.9549442Z [TRACE] (3) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:1016] read 0 frames
2024-02-13T23:31:44.9597801Z [TRACE] (2) WasapiTest: [src\main.rs:45] New buffer frame count 441
2024-02-13T23:31:44.9599839Z [DEBUG] (2) WasapiTest: need more samples
2024-02-13T23:31:44.9601226Z [WARN] no data, filling with zeros
2024-02-13T23:31:44.9602729Z [TRACE] (2) WasapiTest: [src\main.rs:70] write
2024-02-13T23:31:44.9604211Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:885] wrote 441 frames
2024-02-13T23:31:44.9605527Z [TRACE] (2) WasapiTest: [src\main.rs:77] write ok
2024-02-13T23:31:44.9690145Z [TRACE] (2) WasapiTest: [src\main.rs:45] New buffer frame count 441
2024-02-13T23:31:44.9691681Z [DEBUG] (2) WasapiTest: need more samples
2024-02-13T23:31:44.9692729Z [WARN] no data, filling with zeros
2024-02-13T23:31:44.9693946Z [TRACE] (2) WasapiTest: [src\main.rs:70] write
2024-02-13T23:31:44.9695152Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:885] wrote 441 frames
2024-02-13T23:31:44.9695997Z [TRACE] (2) WasapiTest: [src\main.rs:77] write ok
2024-02-13T23:31:44.9707677Z [TRACE] (3) WasapiTest: [src\main.rs:127] capturing
2024-02-13T23:31:44.9708986Z [TRACE] (3) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:1016] read 0 frames
2024-02-13T23:31:44.9798429Z [TRACE] (2) WasapiTest: [src\main.rs:45] New buffer frame count 441
2024-02-13T23:31:44.9800213Z [DEBUG] (2) WasapiTest: need more samples
2024-02-13T23:31:44.9801502Z [WARN] no data, filling with zeros
2024-02-13T23:31:44.9804632Z [TRACE] (2) WasapiTest: [src\main.rs:70] write
2024-02-13T23:31:44.980611Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:885] wrote 441 frames
2024-02-13T23:31:44.9807151Z [TRACE] (2) WasapiTest: [src\main.rs:77] write ok
2024-02-13T23:31:44.9856673Z [TRACE] (3) WasapiTest: [src\main.rs:127] capturing
2024-02-13T23:31:44.9858079Z [TRACE] (3) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:1016] read 0 frames
2024-02-13T23:31:44.9890214Z [TRACE] (2) WasapiTest: [src\main.rs:45] New buffer frame count 441
2024-02-13T23:31:44.98917Z [DEBUG] (2) WasapiTest: need more samples
2024-02-13T23:31:44.9892757Z [WARN] no data, filling with zeros
2024-02-13T23:31:44.9894191Z [TRACE] (2) WasapiTest: [src\main.rs:70] write
2024-02-13T23:31:44.9895624Z [TRACE] (2) wasapi::api: [C:\Users\Ben\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wasapi-0.14.0\src\api.rs:885] wrote 441 frames
2024-02-13T23:31:44.989666Z [TRACE] (2) WasapiTest: [src\main.rs:77] write ok
2024-02-13T23:31:44.9998115Z [TRACE] (2) WasapiTest: [src\main.rs:45] New buffer frame count 441

Just continues on like this indefinitely. Never prints "pushing samples" as it's supposed to in the example loopback demo. Never hits the breakpoint it is supposed to hit whenever the sample queue has enough samples to be bigger than the blockalign * chunksize.

HEnquist commented 7 months ago

Oh there may be some confusion here. The loopback example doesn't show loopback capture! It's recording from the default recording device, and playing back the recorded audio on the default playback device. This is often also called loopback, but I should probably rename it to something different. In your case it records from the default device which is the VIVE virtual audio driver.

If you want to try loopback capture, in the meaning of recording from a playback device, then look at the record example. You just need to change "Capture" to "Render" on line 19: https://github.com/HEnquist/wasapi-rs/blob/bc340b587f43e643a378f0a693869a86a26a717d/examples/record.rs#L19

benaclejames commented 7 months ago

Ah, perfect! My mistake for not noticing the winapi sooner! Thank you so much for your help