iOS将音频从URL划分为帧

我正在iOS上制作一个简单的互联网广播应用程序,具有非常简单的语音/音乐歧视。 主要思想是从url播放信号的无线电,同时它检查正在广播的信号类型。 当它检测到语音时,它会改变频道等等。

我使用故事板和AVFoundation for Player编写了一个简单的iOS应用程序。 我在执行语音检测时遇到问题。 我为算法编写了一个Matlab代码,但我不确定如何在Xcode中执行此操作。

clear all close all [s, fs] = audioread('nagranie.wav'); length = length(s)/fs; lengthofframe20ms = 0.2*fs; numberofframes20ms = round(length(s)/lengthofframe20ms); s1 = zeros(lengthofframe20ms*numberofframes20ms,1); for i=1:1:length(s(:,1)) s1(i,1)=s(i,1); end frame20ms=zeros(numberofframes20ms,lengthofframe20ms); for i=1:1:numberofframes20ms for j=1:1:lengthofframe20ms frame20ms(i,j)=s1(j+3200*(i-1),1); end end lengthofframe260ms = 2.6*fs; numberofframes260ms = round(length(s)/lengthofframe260ms); s2 = zeros(lengthofframe260ms*numberofframes260ms,1); for i=1:1:length(s(:,1)) s2(i,1)=s(i,1); end frame260ms=zeros(numberofframes260ms,lengthofframe260ms); for i=1:1:numberofframes260ms for j=1:1:lengthofframe20ms frame260ms(i,j)=s1(j+41600*(i-1),1); end end En = zeros(numberofframes20ms,1); for i=1:1:numberofframes20ms L=length(frame20ms(i,:)); En(i)=(norm(frame20ms(i,:))^2)/L; end Ek = zeros(numberofframes260ms,1); for i=1:1:numberofframes260ms L=length(frame260ms(i,:)); Ek(i)=(norm(frame260ms(i,:))^2)/L; end sumN = 0; for i=1:1:length(En) sumN=sumN+En(i); end sumK = 0; for i=1:1:length(Ek) sumK=sumK+Ek(i); end EnP = zeros(numberofframes20ms,1); for i=1:1:numberofframes20ms EnP(i)=((En(i))/sumK); end treshold = 0.5; lambda=treshold*sumN; M=numberofframes20ms/numberofframes260ms; coff=zeros(numberofframes20ms,1); for i=1:1:numberofframes20ms if (En(i)<lambda) for k=1:1:numberofframes260ms if (((k-1)*M+1)<i) && (i<k*M) coff(i)=1; end end end end 

正如你所看到的,首先我们必须将信号分成20ms帧和更大的260ms帧,然后我们计算每20ms帧的能量,做更多的数学运算,在最后一点我们检查条件,当它适合它的语音当它没有帧时被分类为音乐。

我不知道如何开始做歧视部分。 我应该使用哪些框架? 我认为这不是很难,因为我花了20分钟把它写在MatLab中。 🙂

这是我的应用程序播放电台的方式:

 { RadioInfo *sharedRadio = [RadioInfo sharedRadio]; NSString *program = [NSString stringWithFormat:@"%@",sharedRadio.list[value]]; NSURL *url = [NSURL URLWithString:program]; AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url]; self.playerItem = [AVPlayerItem playerItemWithURL:url]; self.player = [AVPlayer playerWithPlayerItem:playerItem]; self.player = [AVPlayer playerWithURL:url]; [self.player pause]; [self.player play]; 

}

这是我在这里的第一篇文章,所以请善待。 我会感激和帮助。 我坚持这一部分。

如果您想获取音频数据并播放它,您可以使用比AvPlayer更低级别的API。 AVPlayer太高级别,无法访问音频数据。 您可以通过HTTP检索音频,并在分析后使用AvAudioPLayer框架播放。 但是你当然必须自己实施很多东西。

  NSURL *url = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]; NSData *soundData = [NSData dataWithContentsOfURL:url]; // analyze sound data here and switch URL if needed audioPlayer = [[AVAudioPlayer alloc] initWithData:soundData error:NULL]; audioPlayer.delegate = self; [audioPlayer play];