在Python 2.6.6中显示文本时如何播放音频?

在Python 2.6.6中显示文本时如何播放音频?,python,audio,wav,python-2.6,Python,Audio,Wav,Python 2.6,我试图用Python2.6.6制作一个程序,在后台播放音频的同时显示文本。我只完成了部分课文 print "Well here we are again" print "It’s always such a pleasure" print "Remember when you tried to kill me twice?" print "Oh, how we laughed and laughed" print "Except I wasn’t laughing" print "Under t

我试图用Python2.6.6制作一个程序,在后台播放音频的同时显示文本。我只完成了部分课文

print "Well here we are again"
print "It’s always such a pleasure"
print "Remember when you tried to kill me twice?"
print "Oh, how we laughed and laughed"
print "Except I wasn’t laughing"
print "Under the circumstances I’ve been shockingly nice."
我有一个.wav文件,我想在节目开始时播放。我还希望文本与音乐一起播放(我可以指定文本在歌曲中显示的时间,例如00:00:02)。我想这可能与某种音频模块有关


谢谢

您需要的是用于Python的GStreamer

检查教程,这是一个很好的开始

编辑:
在Windows中,您可以使用标准库中的winsound模块(哇!Python有这个功能!)参见文档

你可能会发现pygame很有用


我最近做了类似的事情,并使用了
audiere
模块

import audiere
ds = audiere.open_device()
os = ds.open_array(input, fs)
os.play()
这将打开第一个可用的音频设备,因为您在windows上,它可能是DirectSound
input
只是一个numpy数组,
fs
是采样频率(因为输入是一个原始数组,您需要指定它)
os.play()
是一个非阻塞调用,因此您可以打印txt或需要执行的任何操作。同时,还有其他暂停/停止等方法。要播放其他文件类型,我只需先将它们转换为wav

下面是我如何解压缩wav文件的

def wave_unpack(fname):
  """
  input: wave filename as string 
  output: left, right, params

  unpacks a wave file and return left and right channels as arrays
  (in case of a mono file, left and right channels will be copies)

  params returns a tuple containing:
  -number of audio channels (1 for mono, 2 for stereo)
  -sample width in bytes
  -sampling frequency in Hz
  -number of audio frames
  -compression type
  -compression name
  """
  import sndhdr, os, wave, struct
  from scipy import array
      assert os.path.isfile(fname), "file location must be valid"
  assert sndhdr.what(fname)[0] == 'wav', "file must have valid header"
  try:
    wav = wave.open(fname)
    params = (nchannels,sampwidth,rate,nframes,comp,compname) = wav.getparams()
    frames = wav.readframes(nframes*nchannels)
  finally:
    wav.close()
  out = struct.unpack_from ("%dh" % nframes*nchannels, frames)
  if nchannels == 2:
    left = array(out[0::2])
    right = array(out[1::2])
  elif nchannels == 1:
    right = left = array(out)
  else:
    assert 0, "number of channels must be 1 or 2"
  return left, right, params
例如,要进行
input
fs
输入,您可以:

from scipy import c_
left, right, params = wave_unpack(fn)
fs = params[2]
left_float  =  left.astype('f')/2**15
right_float = right.astype('f')/2**15
stereo = c_[left_float, right_float]
input = mono = stereo.mean(1)
这很适合我,但我的要求是FFT输入,而不是卡拉OK:)


我确信,
audiere
仅通过提供一个2-dim阵列就可以实现立体声播放。

我正在运行Windows,从我收集的数据来看,GStreamer与它不兼容。我该如何使用Python内置的工具来完成这项任务,或者这是不可能的?你想要你的答案,接受它,这就是我所指望的,我曾经希望你死,但现在我只想要更多的声誉。