无法通过将原始PCM数据传输到另一台设备来播放声音

时间:2017-04-03 21:00:29

标签: python ios audio streaming

我正在使用能够给我浮点原始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值,然后转换为字节但仍然得到相同的错误反馈。

编辑:

我已经调查AVCaptureSessionAVCapture​Device试图获取实时麦克风数据,但我们无法找到有关如何正确设置它的好例子。大部分时间它处理视频或不得不等到最后一秒才能获得音频数据。

我想要一些动态的东西,我一次得到一些帧并发送它。

0 个答案:

没有答案