我正在尝试捕获应用程序声音并将其传递给 AVAssetWriter 作为输入。
我正在设置音频单元的回调以获取 AudioBufferList。
问题始于将 AudioBufferList 转换为 CMSampleBufferRef。
它总是返回错误 -12731,这表明缺少所需的参数,
谢谢
Karol
-(OSStatus) recordingCallbackWithRef:(void*)inRefCon
flags:(AudioUnitRenderActionFlags*)flags
timeStamp:(const AudioTimeStamp*)timeStamp
busNumber:(UInt32)busNumber
framesNumber:(UInt32)numberOfFrames
data:(AudioBufferList*)data
{
AudioBufferList bufferList;
bufferList.mNumberBuffers = 1;
bufferList.mBuffers[0].mData = NULL;
OSStatus status;
status = AudioUnitRender(audioUnit,
flags,
timeStamp,
busNumber,
numberOfFrames,
&bufferList);
[self checkOSStatus:status];
AudioStreamBasicDescription audioFormat;
// Describe format
audioFormat.mSampleRate = 44100.00;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = 1;
audioFormat.mBitsPerChannel = 16;
audioFormat.mBytesPerPacket = 2;
audioFormat.mBytesPerFrame = 2;
CMSampleBufferRef buff = NULL;
CMFormatDescriptionRef format = …Run Code Online (Sandbox Code Playgroud) 我目前正在为我的大学做一个项目。任务是编写语音识别系统,该系统将在后台运行在手机上,等待一些命令(例如 call 0 123 ...)。
这是 2 个月的项目,所以它不必非常准确。可接受的噪音量可能很小,并且单词将被片刻的沉默隔开。
我目前正在加载以 RAW 16 位 PCM 格式编码的示例字。将其拆分为块(每秒约 50 个)并在每个块上运行 FFT 以获得频谱。
需要解决的问题是:1)通过较长的录音并将其拆分为单词。2)找到最匹配的词
1)我正在考虑只检查一个接一个的块,如果我遇到几个具有更高人类语音频率的块,则认为该词已经开始。无论如何,我正在寻找可能对此有所帮助的资源。
2)这个接缝有点硬。是否有必要将 HMM 用于这样的系统,或者假设词汇量如此之小(20 个单词),是否有更简单的方法?
编辑:该项目的重点是我自己编写系统,所以我不能使用像 Sphinx 或 HTK 这样的现成库。
问候, 卡罗尔
c++ speech-recognition fft speech-to-text hidden-markov-models
我正在为我的大学做一个项目。任务是打印当前日期和时间。我成功地创建了一个打印数字的子程序,我现在需要的只是获取日期。我试过这种方法:
%define RTCaddress 0x70
%define RTCdata 0x71
;Get time and date from RTC
.l1: mov al,10 ;Get RTC register A
out RTCaddress,al
in al,RTCdata
test al,0x80 ;Is update in progress?
jne .l1 ; yes, wait
mov al,0 ;Get seconds (00 to 59)
out RTCaddress,al
in al,RTCdata
mov [RTCtimeSecond],al
Run Code Online (Sandbox Code Playgroud)
但只是打电话:
.l1: mov al,10 ;Get RTC register A
out RTCaddress,al
Run Code Online (Sandbox Code Playgroud)
足以导致崩溃。您知道如何解决这种方法吗,或者我可以使用任何不同的方法。我正在 Linux 64 位上使用 Nasm。