我正在使用能够给我浮点原始PCM数据的library。 在本地播放有效,但我有问题可以在另一台设备上播放。
我用来播放音频的是PyAudio
它应该能够接受原始PCM,但是,每当我在另一台设备上播放时,我都会得到错误的反馈。
这就是我在python方面所做的事情
CHUNK = 512
CHANNELS = 2
RATE = 44100
WIDTH = 2
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(WIDTH),
channels=CHANNELS,
rate=RATE,
output=True,
frames_per_buffer=CHUNK)
def audioStream_ios(payload):
if stream.is_active():
# print payload
self.buffer += payload
# stream.write(payload)
yield self.subscribe(audioStream_ios, 'com.app.audioStream_ios')
while 1:
print len(self.buffer)
if stream.is_active() and len(self.buffer) >= CHUNK * 1:
data = self.buffer[:CHUNK]
self.buffer = self.buffer[CHUNK:]
# print 'write'
# stream.write(data)
yield sleep(0.01)
我如何在iOS端获取音频
Novocaine *audioManager = [Novocaine audioManager];
[audioManager setInputBlock:^(float *newAudio, UInt32 numSamples, UInt32 numChannels) {
// Now you're getting audio from the microphone every 20 milliseconds or so. How's that for easy?
// Audio comes in interleaved, so,
// if numChannels = 2, newAudio[0] is channel 1, newAudio[1] is channel 2, newAudio[2] is channel 1, etc.
// ** Send over newAudio data over network **
}];
[audioManager play];
我不确定是否可能不能通过原始PCM发送,但可能会将其转换为连续的wav文件。或者也许还有另一种工具可以用来播放原始PCM数据。
即使我使用的图书馆根本不是我想要实现的目标的好方法。
我尝试将浮点PCM数据转换为unsigned int值,然后转换为字节但仍然得到相同的错误反馈。
编辑:
我已经调查AVCaptureSession
和AVCaptureDevice
试图获取实时麦克风数据,但我们无法找到有关如何正确设置它的好例子。大部分时间它处理视频或不得不等到最后一秒才能获得音频数据。
我想要一些动态的东西,我一次得到一些帧并发送它。