Python 3.x Python2到Python3结构包问题

Python 3.x Python2到Python3结构包问题,python-3.x,python-2.7,struct,Python 3.x,Python 2.7,Struct,我试图让以下代码在Python3中工作。在Python2中这很好。我已将xranges更改为range,但此行有一个问题:data=''.join(结构包('f',samp)表示samp的音调): 序列项0:预期的str实例,找到的字节数。 我发现了,但不知道如何将其应用于我的情况。非常感谢您的帮助 import math import struct import pyaudio def play_tone(frequency, amplitude, duration, fs, stream)

我试图让以下代码在Python3中工作。在Python2中这很好。我已将
xrange
s更改为
range
,但此行有一个问题:
data=''.join(结构包('f',samp)表示samp的音调)

序列项0:预期的str实例,找到的字节数。

我发现了,但不知道如何将其应用于我的情况。非常感谢您的帮助

import math
import struct
import pyaudio

def play_tone(frequency, amplitude, duration, fs, stream):
    N = int(fs / frequency)
    T = int(frequency * duration)  # repeat for T cycles
    dt = 1.0 / fs
    # 1 cycle
    tone = (amplitude * math.sin(2 * math.pi * frequency * n * dt)
            for n in xrange(N))
    # todo: get the format from the stream; this assumes Float32
    data = ''.join(struct.pack('f', samp) for samp in tone)
    for n in xrange(T):
        stream.write(data)

fs = 48000
p = pyaudio.PyAudio()
stream = p.open(
    format=pyaudio.paFloat32,
    channels=1,
    rate=fs,
    output=True)

# play the C major scale
scale = [130.8, 146.8, 164.8, 174.6, 195.0, 220.0, 246.9, 261.6]
for tone in scale:
    play_tone(tone, 0.5, 0.75, fs, stream)

# up an octave
for tone in scale[1:]:
    play_tone(2*tone, 0.5, 0.75, fs, stream)

stream.close()
p.terminate()

问题是,您正在连接的空字符串实际上是一个
str
实例(Unicode字符串),但是您正在连接的值(从
struct.pack
获得)是
字节
实例。Python3不允许将不同的字符串类型混合在一起

'
更改为
b'
,它应该可以工作:
data=b'。加入(结构包('f',samp)以获得samp的音调)

“有问题”-您愿意与我们分享它是什么吗?