从 Android 10 开始,我必须使用辅助功能访问,您可以使用具有源语音识别功能的 MediaRecorder 来录制通话。问题是,在某些设备上,录音不是双向的 - 只有一种声音。
这是 MediaRecorder 的基本实现:
MediaRecorder recorder=new MediaRecorder();
recorder.setAudioSource(AudioSource.VOICE_RECOGNITION);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC);
recorder.prepare(); Thread.sleep(2000); recorder.start();
Run Code Online (Sandbox Code Playgroud)
我从 Google Play 测试了 Cube ACR。他们可以选择将音频源设置为“语音识别软件”。如果启用此功能,您可以获取对话的双方。
我在网上没有找到与“语音识别软件”相关的东西。有谁知道如何做到这一点?- 也许是一个 github 项目
有谁有一个可以在新版本的 Android 上录制对话的两个部分的解决方案吗?Android 12 或 Android 13。
谢谢
我将在以下位置进行申请:
简而言之,我需要同时具有用于记录和播放的循环缓冲区,并且需要每20毫秒左右将即将播放的新数据“馈入”输出缓冲区。
我一直在看DirectSound,但似乎并没有太大帮助。读取和写入输出缓冲区似乎与Win32非常相似,唯一似乎可以帮助在主歌曲上播放“其他声音”的地方。
我应该使用DirectSound,还是应该直接使用原始Windows API?
DirectSound会为我做任何事情吗?
提前致谢!
我在AS3中有一个工作的麦克风录音脚本,我已经成功地通过AMF将.wav文件保存到服务器.这些文件在任何音频播放器中都能正常播放,没有奇怪的效果.
作为参考,我正在做的是捕捉麦克风的ByteArray :(在一个名为AudioRecorder的类中)
public function startRecording():void {
_rawData = new ByteArray();
_microphone
.addEventListener(SampleDataEvent.SAMPLE_DATA,_samplesCaptured, false, 0, true);
}
private function _samplesCaptured(e:SampleDataEvent):void {
_rawData.writeBytes(e.data);
}
Run Code Online (Sandbox Code Playgroud)
这没有问题.录制完成后,我可以使用_rawData变量并通过WavWriter类等运行它.
但是,如果我使用以下代码运行同样的ByteArray作为声音我从adobe cookbook改编:(在一个名为WavPlayer的类中)
public function playSound(data:ByteArray):void {
_wavData = data;
_wavData.position = 0;
_sound.addEventListener(SampleDataEvent.SAMPLE_DATA, _playSoundHandler);
_channel = _sound.play();
_channel
.addEventListener(Event.SOUND_COMPLETE, _onPlaybackComplete, false, 0, true);
}
private function _playSoundHandler(e:SampleDataEvent):void {
if(_wavData.bytesAvailable <= 0) return;
for(var i:int = 0; i < 8192; i++) {
var sample:Number = 0;
if(_wavData.bytesAvailable > 0) sample = _wavData.readFloat();
e.data.writeFloat(sample);
}
}
Run Code Online (Sandbox Code Playgroud)
音频文件以双倍速度播放!我检查了记录比特率等等,我很确定这些都是正确的,我尝试改变缓冲区大小和我能想到的任何其他数字.它可能是单声道与立体声的东西吗?
希望我在这里很清楚,谢谢!
我需要能够在Android中使用麦克风创建WAV文件.目前,我遇到了很多麻烦.到目前为止,这是我的情况.我正在使用micDroid项目代码的一部分进行记录:
//read thread
int sampleRate = 44100;
int bufferSize = AudioRecord.getMinBufferSize(sampleRate,android.media.AudioFormat.CHANNEL_CONFIGURATION_MONO,android.media.AudioFormat.ENCODING_PCM_16BIT);
AudioRecord ar = new AudioRecord(AudioSource.MIC,sampleRate,android.media.AudioFormat.CHANNEL_CONFIGURATION_MONO,android.media.AudioFormat.ENCODING_PCM_16BIT,bufferSize);
short[] buffer = new short[bufferSize];
ar.startRecording();
while(isRunning){
try{
int numSamples = ar.read(buffer, 0, buffer.length);
queue.put(new Sample(buffer, numSamples));
} catch (InterruptedException e){
e.printStackTrace();
}
}
//write thread
int sampleRate = 44100;
WaveWriter writer = new WaveWriter("/sdcard","recOut.wav",sampleRate,android.media.AudioFormat.CHANNEL_CONFIGURATION_MONO,android.media.AudioFormat.ENCODING_PCM_16BIT);
try {
writer.createWaveFile();
} catch (IOException e) {
e.printStackTrace();
}
while(isRunning){
try {
Sample sample = queue.take();
writer.write(sample.buffer, sample.bufferSize);
} catch (IOException e) {
//snip
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但最终结果可识别地包含我所说的,但它是可怕的扭曲.这是大胆的屏幕上限(WMP拒绝播放文件).

任何帮助将不胜感激,如果您需要更多代码/信息,请告诉我. …
我试图找出一种在iOS应用程序的后台录制音频并将其流式传输到服务器的方法.
当应用程序处于前台时,我几乎得到了这个功能.我使用AVAudioRecorder记录X秒的输入.一旦我得到完成的回调,我再记录X秒.每个记录会话都存储到不同的文件中,我将这些文件异步发送到服务器.
但是,当我的应用程序进入后台模式时,这似乎不起作用.
当进入后台时,当前记录会话继续记录,直到X秒开始,但是我的应用程序被暂停,然后才能开始另一个记录会话.
有任何想法吗?
这是我的回调代码:
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)aRecorder successfully:(BOOL)flag {
NSLog(@"hello");
[self initRecorder];
[recorder recordForDuration:5];
}
Run Code Online (Sandbox Code Playgroud) 这不是另一个"如何在浏览器中录制音频?" 问题......我知道HTML5 Stream API即将来临,Flash已经可以访问用户的麦克风和摄像头了.我只是想知道,作为一个对Flash知之甚少的Javascript开发人员,如果有人开发了一个JS库,它连接到Flash的设备功能进行录制,但是将结果发送回javascript(可能是使用ExternalInterface).
换句话说......像SoundManager2这样的库利用Flash回退进行音频播放,但它们似乎不允许录制.有没有人写过一个使用隐形Flash电影的JS库来录音?
我想用iPhone录制音频,然后将其上传到服务器.
我可以录制音频,但我的问题是我应该使用哪种格式来录制音频,以便录制器将生成文件最小的文件.
我是HTML,Javascript和公司的新手,所以请原谅我提出一个可能很明显的问题.
我想建立一个webapp,用户可以上传音频和一些自己的信息.我有一个看起来像这样的表单:
<form method="post" action="/add_recording" enctype="multipart/form-data">
<label>Name: </label>
<input type="text" name="user_name" maxlength="20" size="20" value="Joe">
<br>
<label>Audio File: </label>
<input type="file" name="user_audio"/>
<br>
<input value="Upload" type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)
这可行,但它不是非常用户友好:人们必须弄清楚如何创建自己的音频文件,即使他们知道如何,这很烦人.我想允许用户在浏览器中录制.我找到了https://github.com/mattdiamond/Recorderjs和http://webaudiodemos.appspot.com/AudioRecorder/index.html,这看起来非常酷(暂时忽略了它们只适用于最新版本的铬,据我所知).
我的问题是:我如何修改recorderjs代码,以便记录的blob自动上传到我的表单中,用户无需下载文件并通过单击type ="file"输入手动浏览到它?
我的网络开发技能非常有限,所以我非常感谢任何帮助.我的第一个猜测是自动将音频blob下载到我选择的文件名,并修改表单中的type ="file"输入指向那里,但显然这是不可能的(从我在例如如何设置值中看到的以HTML格式输入文件?).
谢谢,
阿德里安
编辑:这里有一个类似的问题:RecorderJS通过AJAX上传记录的blob.我的问题的一个解决方案是学习AJAX并按照该问题的答案.不过,我有兴趣知道是否有任何方法可以使用老式文件输入(或更普遍的html格式)上传recorderjs音频.
我为RaspberryPi购买了一个USB音频控制器,以便捕获音频输入.我已经在Rasbian上完成了以下步骤,但仍然不确定音频捕获.你能指导我如何得到它吗?
键入以下命令以安装音频设备
pi@raspberrypi ~ $ sudo apt-get install alsa-utils
Run Code Online (Sandbox Code Playgroud)
成功检测
pi@raspberrypi ~ $ lsusb
pi@raspberrypi ~ $ amixer
pi@raspberrypi ~ $ alsamixer
Run Code Online (Sandbox Code Playgroud)
同时配置USB音频设备以使其成为默认设备
/etc/modprobe.d/alsa-base.conf
Run Code Online (Sandbox Code Playgroud)
通过添加磅/哈希符号
options snd-usb-audio index=2
#options snd-usb-audio index=2
Run Code Online (Sandbox Code Playgroud) 我正在使用在Fedora 20的此修订版中从源代码构建的ffmpeg 。
我可以使用以下命令完美录制音频:
FFmpeg/ffmpeg -f alsa -ac 2 -i pulse -- output.wav
Run Code Online (Sandbox Code Playgroud)
但是,当我同时尝试屏幕捕获和音频时,如下所示:
FFmpeg/ffmpeg -video_size 800x600 -framerate 25 -ac 2 -f x11grab -i :0.0+0,0 -ac 2 -f alsa -i pulse -ac 2 -acodec copy output.mpeg -ac 2
Run Code Online (Sandbox Code Playgroud)
我正在获取一个音频通道为0的视频,我可以检查其运行情况 FFmpeg/ffplay output.mpeg
Input #0, mpeg, from 'output.mpeg':
Duration: 00:00:09.44, start: 0.540000, bitrate: 2743 kb/s
Stream #0:0[0x1e0]: Video: mpeg1video, yuv420p(tv), 800x600 [SAR 1:1 DAR 4:3], 104857 kb/s, 25 fps, 25 tbr, 90k tbn, 25 tbc
Stream #0:1[0x1c0]: Audio: …Run Code Online (Sandbox Code Playgroud) audio-recording ×10
android ×2
audio-player ×2
flash ×2
ios ×2
iphone ×2
java ×2
wav ×2
audio ×1
core-audio ×1
directsound ×1
ffmpeg ×1
file-upload ×1
forms ×1
html ×1
html5 ×1
javascript ×1
objective-c ×1
raspberry-pi ×1
raspbian ×1
winapi ×1