我需要使用Python 3捕获192 kHz音频以进行一些生物声学实验.我有硬件,声音设备USBPre 2声卡,具有高达100 kHz的良好频率响应曲线的麦克风,我已启用我的操作系统(ubuntu 13.04)从这张卡以192 kHz采样.
我试过用PyAudio录音.它似乎工作,并将给我一个采样率为192 kHz的wav文件.然而,当我观察光谱时,没有超过24 kHz的功率,这表明PyAudio不是真正捕获192 kHz,而是48 kHz.但是,当我使用Audacity录制来自JACK的输入时,我得到了一个很好的录音,功率高达96kHz.所以,我的印象是PyAudio实际上并没有以192 kHz采样声音,即使它应该能够.如何解决这个问题?
我没有错误地启动JACK:
/usr/bin/jackd -R -dalsa -Chw:1,0 -n3 -o1 -p2048 -r192000
jackd 0.122.0
Copyright 2001-2009 Paul Davis, Stephane Letz, Jack O'Quinn, Torben Hohn and others.
jackd comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details
JACK compiled with System V SHM support.
loading driver ..
apparent rate = 192000
creating alsa driver ... …Run Code Online (Sandbox Code Playgroud) 我的任务是,如果有人知道如何创建一个可以通过设备的耳机插孔发送电荷的Android应用程序,就像在这个视频iPocket_LED中一样.该视频显示了一个iPhone应用程序,用于控制插入耳机插孔的LED.
我想知道如何访问设备发送电子信号.
抱歉我的英语,不是我的语言,我希望有人了解我
编辑:我现在正在使用杰克(杰克音频连接套件).见下面的答案.
我的Raspberry Pi上有一个声卡,有8个输出声道(四个立体声声道),一张Octosound卡.我想要做的是选择其中一个通道来传送声音.使用此代码我打印声卡的信息:
mixers = AudioSystem.getMixerInfo();
for (Mixer.Info mixerInfo : mixers) {
logger.debug("\n");
logger.debug("Found Mixer: " + mixerInfo);
Mixer m = AudioSystem.getMixer(mixerInfo);
Line.Info[] sourceLines = m.getSourceLineInfo();
for (Line.Info li : sourceLines) {
logger.debug("Found source line: " + li + " " + li.getClass());
if (li instanceof Port.Info) {
Port.Info portInfo = (Port.Info) li;
logger.debug("port found " + portInfo.getName() + " is source " + portInfo.isSource());
sourceDataLines.add(portInfo);
}
}
Line.Info[] targetLines = m.getTargetLineInfo();
for (Line.Info li : targetLines) {
logger.debug("Found target …Run Code Online (Sandbox Code Playgroud) 我想要实现的总结:
我正在做一些关于Discord机器人的工作.我正在尝试加入语音通道,这是一个简单的部分,然后使用该语音通道中扬声器的组合音频作为Web浏览器中网页的输入.只要它可以通过Selenium控制,它对哪个浏览器来说并不重要.
到目前为止,我的机器人使用discord.py API包装器在Python中编写.不幸的是,听取而不是放入音频并没有完全实现 - 更不用说记录 - 与discord.py.这让我决定切换到node.js(即discord.js)以获取我的机器人的语音通道内容.
切换到discord.js之后,很容易确定谁在说话并为该用户创建音频流(PCM流).对于下一部分,我只是将音频流传输到虚拟麦克风并选择它作为浏览器上的音频输入.您甚至可以在node.js 1中使用FFMPEG ,以获得如下所示的内容:
const Discord = require("discord.js");
const client = new Discord.Client();
client.on('ready', () => {
voiceChannel = client.channels.get('SOME_CHANNEL_ID');
voiceChannel.join()
.then(conn => {
console.log('Connected')
const receiver = conn.createReceiver();
conn.on('speaking', (user, speaking) => {
if (speaking) {
const audioStream = receiver.createPCMStream(user);
ffmpeg(stream)
.inputFormat('s32le')
.audioFrequency(16000)
.audioChannels(1)
.audioCodec('pcm_s16le')
.format('s16le')
.pipe(someVirtualMic);
}
});
})
.catch(console.log);
});
client.login('SOME_TOKEN');
Run Code Online (Sandbox Code Playgroud)
最后一部分,创建和流式传输到虚拟麦克风,已被证明是相当复杂的.我已经阅读了关于高级Linux声音架构(ALSA)和JACK音频连接套件的大量SO帖子和文档,但我根本无法弄清楚如何设置将显示为麦克风的虚拟麦克风我的浏览器,或如何管道音频到它.
任何帮助或指向解决方案的指针将不胜感激!
在过去的几天里,我一直在研究这个问题.我现在已经了解了ALSA环回设备,并认为解决方案必须存在.
我已经差不多跟着后谈到有关环回设备,旨在实现以下目标:
简单地假设您在同一设备的一个OUT和一个IN之间有物理链接. …
我需要使用嵌入式Linux系统将音频从收音机发送到辅助系统.
辅助系统需要建立一个需要几秒钟的通信信道.
因此,如果我不想丢失音频的开头,我需要一种方法来录制声音并以自定义延迟播放(最多几秒钟).
应该可以开始arecord将音频记录在tmpfs文件系统中的文件中,并且当进入通信时,启动aplay.但在这种情况下,开始仍然失败,因为要记录的信号来得太晚了.
Linux上是否有一个程序可以在RAM中的环形缓冲区中连续录制声音,并且能够根据需要自定义延迟播放?
如果没有,在嵌入式系统上编写这样一个程序的最佳库是什么?alsa还是其他什么?
我正在运行Raspberry Pi图像2012-07-15-wheezy-raspbian.zip,我有一个CMedia 108 USB音频适配器安装RPi.
尝试使用内置音频启动jackd
jackd -r -d alsa -d hw:0
Run Code Online (Sandbox Code Playgroud)
无法启动
JACK compiled with System V SHM support.
loading driver ..
creating alsa driver ... hw:0|hw:0|1024|2|48000|0|0|nomon|swmeter|-|32bit
control device hw:0
ALSA: Cannot open PCM device alsa_pcm for capture. Falling back to playback-only mode
configuring for 48000Hz, period = 1024 frames (21.3 ms), buffer = 2 periods
ALSA: mmap-based access is not possible for the playback stream of this audio interface
ALSA: cannot configure playback channel
cannot load driver module alsa …Run Code Online (Sandbox Code Playgroud) 我在Python 2.6.6下运行PyAudio并希望它使用ALSA而不是JACK.
In [1]: import pyaudio
In [2]: pa = pyaudio.pa
In [3]: pa.initialize()
Cannot connect to server socket err = No such file or directory
Cannot connect to server socket
jack server is not running or cannot be started
Run Code Online (Sandbox Code Playgroud) 我对 gradle 还很陌生。我目前尝试在 gradle 设置中将一个研究 Android 应用程序升级到 Java 1.8,其中它提示我将 jackOptions 启用为“true”,以便我可以在我的应用程序中使用 lambda 表达式。
这是我当前的 gradle 选项:
构建.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.1"
dexOptions{
javaMaxHeapSize "4g"
}
defaultConfig {
applicationId "com.bmw.www.team10"
minSdkVersion 23
targetSdkVersion 24
versionCode 1
versionName "1.0"
multiDexEnabled true
jackOptions{
enabled true
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:multidex:1.0.1'
compile …Run Code Online (Sandbox Code Playgroud) 我在使用包含弱符号和--as-needed链接器标志的库时遇到了麻烦.
(这使用了Jack库)
$ cat <<EOF >myjack.c
#include <jack/weakjack.h>
#include <jack/jack.h>
int main() {
if (jack_client_opent)
jack_client_open("foobar", JackNoStartServer, 0, 0);
else return 1;
return 0;
}
EOF
$ gcc -o myjack myjack.c -Wl,--no-as-needed -ljack
$ ./myjack && echo "ok" || echo "K.O."
ok
$ ldd myjack | grep jack
libjack.so.0 => /usr/lib/x86_64-linux-gnu/libjack.so.0 (0x00007f16f615f000)
$ gcc -o myjack myjack.c -Wl,--as-needed -ljack
$ ./myjack && echo "ok" || echo "K.O."
K.O.
$ ldd myjack | grep jack
$ …Run Code Online (Sandbox Code Playgroud) jack ×10
audio ×4
alsa ×3
android ×2
linux ×2
node.js ×2
pyaudio ×2
python ×2
raspberry-pi ×2
discord.js ×1
ffmpeg ×1
gcc ×1
gradle ×1
headphones ×1
java ×1
javascript ×1
linker ×1
narwhal ×1
portaudio ×1
python-3.x ×1
weak-linking ×1