App 实现录音保存音频文件,并实现本地语音识别匹配功能。
通过网络请求上传通过语音匹配的音频文件。
服务器接收到文件并进行语音识别,使用的是第三方微软语音识别,只支持 PCM
数据源的 WAV
格式。
本地识别没有任何问题,上传到服务器的文件无法识别,微软库直接报错。猜测上传的音频个是问题,导致的问题。
- (NSDictionary *)getAudioSetting { NSMutableDictionary *dicM=[NSMutableDictionary dictionary]; //设置录音格式 [dicM setObject:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey]; //设置录音采样率,8000是电话采样率,对于一般录音已经够了 [dicM setObject:@(16000) forKey:AVSampleRateKey]; //设置通道,这里采用单声道 1 2 [dicM setObject:@(2) forKey:AVNumberOfChannelsKey]; //每个采样点位数,分为8、16、24、32 [dicM setObject:@(16) forKey:AVLinearPCMBitDepthKey]; //是否使用浮点数采样 [dicM setObject:@(NO) forKey:AVLinearPCMIsFloatKey]; //....其他设置等 return dicM;}
在没有使用微软语音识别库之前,使用上面的代码没有任何问题。识别库更新之后,不识别上传的的音频文件。
一开始以为是因为没有使用浮点数采样导致音频文件被压缩。修改后依然没有解决问题。
经过和服务器的联调,发现 .wav 音频文件的头不信息服务区无法识别。
小编遇到过这个问题,这个问题正确的解决方案如下:
当音频文件保存为 .wav
格式的时候,iOS11
以下的系统,.wav
文件的头部信息是没问题,但是在 iOS11+
.wav
文件的头部信息服务区识别不了。
需要设置 AVAudioFileTypeKey
来解决这个问题。代码如下:
- (NSDictionary *)getAudioSetting { NSMutableDictionary *dicM=[NSMutableDictionary dictionary]; //设置录音格式 [dicM setObject:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey]; if (@available(iOS 11.0, *)) { [dicM setObject:@(kAudioFileWAVEType) forKey:AVAudioFileTypeKey]; } else { // Fallback on earlier versions } //设置录音采样率,8000是电话采样率,对于一般录音已经够了 [dicM setObject:@(16000) forKey:AVSampleRateKey]; //设置通道,这里采用单声道 1 2 [dicM setObject:@(2) forKey:AVNumberOfChannelsKey]; //每个采样点位数,分为8、16、24、32 [dicM setObject:@(16) forKey:AVLinearPCMBitDepthKey]; //是否使用浮点数采样 [dicM setObject:@(NO) forKey:AVLinearPCMIsFloatKey]; //....其他设置等 return dicM;}
对于您描述的问题,上传的 WAV 文件在微软语音识别库中无法识别,这通常是由于文件格式或编码不符合识别库的预期导致的。针对您提供的代码和描述,这里有几个可能的解决方案:
Format
块,它应该包含正确的 wFormatTag
(通常为 1 表示 PCM),nChannels
(通道数),nSamplesPerSec
(采样率),nAvgBytesPerSec
(平均字节速率),nBlockAlign
(块对齐)以及 wBitsPerSample
(每样本位数)。Format
块中的 wFormatTag
字段指定为 WAVE_FORMAT_PCM
(值为 1)时自动处理。但是,如果使用了其他编码,就需要特别小心字节序。最后,请注意,在更改音频设置或进行转码时,您可能需要在本地和服务器上同时测试,以确保更改后的音频文件既能在本地正确识别,也能被微软语音识别库识别。
OpenEars是一个开源的iOS类库,用于在iPhone和iPad实现语音识别功能。本demo利用此开源类库实现了简单的语音识别。可以识别:CHANGE、LEFT、RIGHT、FORWARD、BACKWARD、GO等英文,其他语素需要训练。 [Code4App.com]
我在设计一个可以同时录制语音和将语音转换为文本的应用程序时遇到了这个bug。我使用Google API进行语音识别部分,并使用audioRecorder对象进行录音。它没有成功,因此我转而使用onBufferReceived()来检索过程中的字节(当用户说话时)。Google API代码现在是我代码的onResults()部分,它可以在没有UI的情况下进行语音识别。 这是代码
这里我有记录音频流文件的代码。问题是我想保存这个文件与正确的文件扩展名(主要是. mp3和. aac)。我该如何实现这一点?
我想开发一个模块,它将使用Android中的语音到文本支持。我发现了许多与RecogenerIntent等相关的文档和演示。但我发现所有这些演示都只是在10秒左右的时间里播放声音。但我想让我的演示运行5-10分钟以上。如果不是离线运行,我不会有任何问题,因为我的应用程序总是在线运行。 我也看过Android上的Pocketsphinx,但效果不太好。此外,它只支持Android Studio,而不
问题内容: 我有一把吉他,我需要我的电脑能够分辨出正在演奏的音符,并识别出音调。可以在python中做到吗,也可以在pygame中做到吗?能够在pygame中做到这一点将非常有帮助。 问题答案: 要识别音频信号的频率,可以使用FFT(快速傅立叶变换)算法。据我所知,PyGame无法记录音频,也不支持FFT转换。 首先,您需要从声卡捕获原始采样数据。这种数据称为PCM(脉冲编码调制)。在Python
由于连接到不同的API,我目前正在开发一个工具,允许我阅读所有的通知。 它工作得很好,但现在我想用一些声音命令来做一些动作。 就像当软件说“一封来自Bob的邮件”时,我想说“阅读”或“存档”。 我的软件是通过一个节点服务器运行的,目前我没有任何浏览器实现,但它可以是一个计划。 在NodeJS中,启用语音到文本的最佳方式是什么? 我在它上面看到了很多线程,但主要是使用浏览器,如果可能的话,我希望在一