tksnack-尝试创建波形

时间:2014-01-08 07:53:32

标签: python audio tkinter waveform

我正在尝试使用tksnack创建一个实时移动到正在播放的声音的波形。我发现了一些示例代码或多或少地做了我想要的。

#! /usr/bin/env python

from Tkinter import *
from tkSnack import *

root = Tkinter.Tk()
initializeSnack(root)
snd = Sound()
def start():
    snd.record()

c = SnackCanvas(height=500, width=1920, bg='white')
c.pack()
c.create_waveform(1,1,sound=snd,width=1920,height=500,pixelspersec=500)

start()
root.mainloop()

然而,这个例子从麦克风接收音频,但我想给它一个mp3。我该怎么做呢?我尝试用snd.read(file)替换snd.record(),但是没有用。

1 个答案:

答案 0 :(得分:2)

你也可以使用包snackogg ... tksnack在Linux中工作,libsnack-alsa很好。我不知道还有小食。

这里以记录曲目为例 - 我把按钮放到你的源头。

#! /usr/bin/env python

    from Tkinter import *
    from tkSnack import *

    root = Tkinter.Tk()
    root.geometry("650x560+100+80")
    initializeSnack(root)
    snd = Sound()

    def start():
        snd.record()

    def stop():
        snd.stop()

    def play():
        snd.play()

    def save():
        file = root.tk.call('eval', 'snack::getSaveFile')
        snd.write(file)


    c = SnackCanvas(height=500, width=820, bg='white')
    c.pack()

    c.create_waveform(1,1,sound=snd,width=1920,height=500,pixelspersec=500)

    record=Button(root,width=50,height=50,fg='red', bitmap='snackRecord',command=start).place(x=5,y=501) 
    stop=Button(root,width=50,height=50,fg='black', bitmap='snackStop',command=stop).place(x=60,y=501) 
    play=Button(root,width=50,height=50,fg='black', bitmap='snackPlay', command=play).place(x=115,y=501) 
    save=Button(root,width=5,height=3,fg='black', text='Save', command=save).place(x=170,y=501) 
    root.mainloop()