RogueAmoeba/Soundflower-Original

SOX got nothing from SoundFlower on OS 10.10; 10.11; 10.11.6

Opened this issue · 2 comments

For some reason on some comps SoundFlower does not catch audio. I.e. there are SoundFlower but when I switch input\output to the SoundFlower I cannot get any sound. I have got only not empty file without any sound.

Okay, how I try to get the sound...

Just FYI:

$ system_profiler SPSoftwareDataType

System Software Overview:

System Version: OS X 10.10.5 (14F1912)
Kernel Version: Darwin 14.5.0
Boot Volume: Macintosh HD
Boot Mode: Normal
Computer Name: Craig Computer
User Name: Craig (craigm)
Secure Virtual Memory: Enabled
Time since boot: 1 day22:12

Gonna check is AVFoundation works:

$ ./ffmpeg -h demuxer=avfoundation

Demuxer avfoundation [AVFoundation input device]:
AVFoundation input device AVOptions:
  -list_devices      <int>        .D...... list available devices (from 0 to 1) (default false)
     true                         .D...... 
     false                        .D...... 
  -video_device_index <int>        .D...... select video device by index for devices with same name (starts at 0) (from -1 to INT_MAX) (default -1)
  -audio_device_index <int>        .D...... select audio device by index for devices with same name (starts at 0) (from -1 to INT_MAX) (default -1)
  -pixel_format      <pix_fmt>    .D...... set pixel format (default yuv420p)
  -framerate         <video_rate> .D...... set frame rate (default "ntsc")
  -video_size        <image_size> .D...... set video size
  -capture_cursor    <int>        .D...... capture the screen cursor (from 0 to 1) (default 0)
  -capture_mouse_clicks <int>        .D...... capture the screen mouse clicks (from 0 to 1) (default 0)

Gonna get list of AVFoundation audio devices:

$ ./ffmpeg -f avfoundation -list_devices true -i ''

ffmpeg version 3.1.1-tessus Copyright (c) 2000-2016 the FFmpeg developers
  built with Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
  configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --as=yasm --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzmq --enable-version3 --disable-ffplay --disable-indev=qtkit --disable-indev=x11grab_xcb
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 41.100 / 57. 41.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 47.100 /  6. 47.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
[AVFoundation input device @ 0x7fda40421000] AVFoundation video devices:
[AVFoundation input device @ 0x7fda40421000] [0] Built-in iSight
[AVFoundation input device @ 0x7fda40421000] [1] Capture screen 0
[AVFoundation input device @ 0x7fda40421000] AVFoundation audio devices:
[AVFoundation input device @ 0x7fda40421000] [0] Soundflower (64ch)
[AVFoundation input device @ 0x7fda40421000] [1] Built-in Microphone
[AVFoundation input device @ 0x7fda40421000] [2] Soundflower (2ch)
[AVFoundation input device @ 0x7fda40421000] [3] Built-in Input
: Input/output error

Okay, we have SoundFlower in devices: [AVFoundation input device @ 0x7fda40421000] [2] Soundflower (2ch)

Then I run AppleScript which gonna switch to the "SoundFlower (2ch)":

enableSF("input")
enableSF("output")

Where enableSF(stdname) is:

on enableSF(stdname)    
    tell application "System Preferences"   
        -- activate 
        tell anchor stdname of pane "com.apple.preference.sound" to reveal  
        tell application "System Events"    
            tell application process "System Preferences"   
                tell tab group 1 of window 1    
                    delay 2 
                    set rowslist to selected of row of table 1 of scroll area 1 
                    set counter to 0    
                    repeat with id in rowslist  
                        set counter to counter + 1  
                        set rowName to (value of text field 1 of row counter of table 1 of scroll area 1)   

                        set output to stdname & " " & rowName   
                        set scrpt to "echo \"" & output & "\" >> ~/Desktop/ds.log"  
                        do shell script scrpt   

                        if (rowName is equal to "Soundflower (2ch)") then   
                            set selected of row counter of table 1 of scroll area 1 to true 

                            set output to "
                            !!! FOUND SF for " & stdname & " " & rowName    
                            set scrpt to "echo \"" & output & "\" >> ~/Desktop/ds.log"  
                            log output  
                            do shell script scrpt
                            exit repeat 
                        end if  
                    end repeat  
                end tell    
            end tell    
        end tell    
    end tell    
end enableSF    

In result I have got this:

input Internal Microphone
input Line In
input Digi CoreAudio Device
input Soundflower (2ch)

        !!! FOUND SF for input Soundflower (2ch)

output Headphones
output Digi CoreAudio Device
output Soundflower (2ch)

        !!! FOUND SF for output Soundflower (2ch)

It means that we switch to the SoundFlower. Actually the same can be done by hands, but the script is more reliable as for me.

Okay, next we can try to save some audio via SOX:

$ /Applications/sox-14.3.2/sox -d ~/Desktop/out.wav

Input File     : 'default' (coreaudio)
Channels       : 2
Sample Rate    : 44100
Precision      : 32-bit
Sample Encoding: 32-bit Signed Integer PCM


In:0.00% 00:00:00.00 [00:00:00.00] Out:0     [      |      ]        Clip:0    
...
...
... 
In:0.00% 00:00:02.51 [00:00:00.00] Out:106k  [      |      ]        Clip:0    
...
...
...
In:0.00% 00:00:11.80 [00:00:00.00] Out:516k  [      |      ]        Clip:0    /Applications/sox-14.3.2/sox WARN coreaudio: coreaudio: unhandled buffer overrun.  Data discarded.
...
...
...    
In:0.00% 00:00:12.35 [00:00:00.00] Out:545k  [      |      ]        Clip:0    /Applications/sox-14.3.2/sox WARN coreaudio: coreaudio: unhandled buffer overrun.  Data discarded.
...
...
...
In:0.00% 00:00:13.28 [00:00:00.00] Out:582k  [      |      ]        Clip:0    
Aborted.

And, as you can see, the SOX gives me an empty file. Rather, it gives the data, but there is no sound.

This happens on all OS from 10.10 to 10.11.6. Normal output should be this type:

In:0.00% 00:00:00.28 [00:00:00.00] Out:8.19k [======|======]        Clip:0      
...
...
...
In:0.00% 00:00:04.37 [00:00:00.00] Out:188k  [ -====|===== ] Hd:1.1 Clip:0 
...
...
...     
In:0.00% 00:00:08.82 [00:00:00.00] Out:385k  [======|=====-] Hd:1.1 Clip:0      
In:0.00% 00:00:09.01 [00:00:00.00] Out:393k  [-=====|=====-] Hd:1.1 Clip:0      
In:0.00% 00:00:09.20 [00:00:00.00] Out:401k  [======|======] Hd:1.1 Clip:0 

Hey @mattingalls, could you help me with that?

@xiaose Have you had sox output the devices it sees? Depending on whether or not there is a BlueTooth device attached, I've seen the length of the device names reported by sox to fluctuate (e.g. Soundflower (2). You can get it to output the devices it sees by doing something like this:

$ sox -V6 -t null lol.nul -t coreaudio dkgjjweigew
sox:      SoX v
time:     Sep 22 2016 00:01:30
uname:    Darwin nkjnkjnjknjknkj.local 15.6.0 Darwin Kernel Version 15.6.0: Thu Sep  1 15:01:16 PDT 2016; root:xnu-3248.60.11~2/RELEASE_X86_64 x86_64
compiler: gcc 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)
arch:     1288 48 88 L
sox INFO nulfile: sample rate not specified; using 48000

Input File     : 'lol.nul' (null)
Channels       : 1
Sample Rate    : 48000
Precision      : 32-bit

sox INFO coreaudio: Found Audio Device "Built-in Microphone"

sox INFO coreaudio: Found Audio Device "Built-in Output"

sox INFO coreaudio: Found Audio Device "Soundflower 1"

sox INFO coreaudio: Found Audio Device "Soundflower 2"

sox INFO coreaudio: Found Audio Device "Soundflower 3"

sox INFO coreaudio: Found Audio Device "Soundflower 4"

sox INFO coreaudio: Found Audio Device "Multi-Output "

sox FAIL formats: can't open output file `dkgjjweigew': can not open audio device