Python 在将原始PCM数据传输到其他设备时播放声音时遇到问题

Python 在将原始PCM数据传输到其他设备时播放声音时遇到问题,python,ios,audio,streaming,Python,Ios,Audio,Streaming,我使用的是能够给我浮点原始PCM数据的。 在本地播放是可行的,但我无法在其他设备上播放 我用来播放音频的是PyAudio它应该能够接受原始PCM,但是,每当我在另一台设备上播放时,我都会收到不好的反馈 这就是我在python方面所做的 CHUNK = 512 CHANNELS = 2 RATE = 44100 WIDTH = 2 p = pyaudio.PyAudio() stream = p.open(format=p.get_format_from_width(WIDTH),

我使用的是能够给我浮点原始PCM数据的。 在本地播放是可行的,但我无法在其他设备上播放

我用来播放音频的是
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数据转换为无符号int值,然后再转换为字节,但仍然得到相同的错误反馈

编辑:

我已经研究了
AVCaptureSession
AVCapture​设备
用于尝试获取实时麦克风数据,但未能找到正确设置的好例子。大多数情况下,它处理视频或必须等到最后一秒才能获得音频数据


我想要一些动态的东西,在其中我一次获取帧片段并将其发送过来。

看起来您的iOS设备正在进行音频捕获,本地音频渲染是否正常。。。然后,您正试图从电话流到运行python的服务器。。。要确认PCM的音频捕获正常,您可以将其保存到手机上的文件中。。。下载到笔记本电脑并使用audacity->Import->raw audio播放原始PCM音频文件。。。这将确认iOS端。。。在python端,您可以指向一个已知的良好的PCM流音频源(如果它存在的话),以稳定您的服务器端。。。在您的python上,尝试通过读取WAV文件替换PCM流,该文件为PCMAlso。因此,现在跳过立体声,先让单声道工作(1通道)。。。在python上,将其分解为每个不同的音频样本(您的位深度为16,因此每个样本为两个字节,确保您的音频曲线值与iOS音频曲线值匹配)@ScottStensland感谢您提供的信息。我将检查这些建议。@ScottStensland如何将原始PCM写入文件?我现在把它们都放在花车里。通常,声音文件包含字节。按我现在的方式来做只是一堆浮点值。这就是我获取字符串写入文件
NSData*textData=[[NSString stringWithFormat:@“%f”,1.23456789]dataUsingEncoding:NSUTF8StringEncoding]