2016-01-18 10 views
1

Итак, нам было поручено написать небольшую программу, которая воспроизводит песню для пользователя, а затем попросить их угадать жанр песни, после чего программа спрашивает, хотят ли они услышать другую песню или хочет ли она выйти. Проблема, с которой я сталкиваюсь, - это когда программа сначала воспроизводит песню. Сначала он печатает название викторины и спрашивает пользователя, хотят ли они услышать песню, или выйти из викторины, введя «-1». Однако, если пользователь хочет играть песню, он воспроизводит песню, но после продолжения клипа не переходит к следующей части викторины (угадывая жанр). Программа просто остается в этом режиме воспроизведения, и я ничего не могу сделать, введя cntrl + C.Когда я играю WAV в python, программа не останавливается, когда файл заканчивается, оставляя программу невосприимчивой

Я неуклонно искал ответы на эту проблему, я написал более простые программы, чтобы узнать, продолжит ли это когда-нибудь воспроизведение песни, даже спросив моего лектора о проблеме (у него не было ответов для меня странно). Вот мой код (playWav2 является pyaudio скрипт для воспроизведения файла WAV):

import playWav2 as pw 
#Here I am providing the list of genres and songs for the program to take info from. 
#I am using "s" for the song list, and "i" for the genre list. 
genre_list=['melodic punk','alt rock','drum and bass','house','punk rock'] 
song_list=["Welcome to Paradise.wav","Worry Rock.wav","Propane Nightmares.wav","Lalula.wav","Life During Wartime.wav"] 
i=0 
s=0 
#Here I am providing the participant with the ability to play a song 
decision=input("Guess the genre of the song! (enter any key to play a song. Enter -1 to finish the quiz)") 
if decision == '-1': 
      exit() 
else: 
    pw.play(song_list[s])   


#Here I am showing the participant the list of possible genres to choose from. 
print("heres a list of my favorite genres!") 
print(genre_list) 
#Here the participant guesses the genre  
genre=input("What genre do you think that was?") 
#If the genre is correct, it plays the next song, if it is not in genre_list, it stops.  
while genre == genre_list[i]: 
    print("Great guess! %s is correct!"%(genre)) 
    choice=input("Ok, so now that you got that right, ready to try another? (y/n)") 
    if choice.lower() == 'y': 
     i+=1 
     i%=5 
     pw.play(song_list[s]) 
    else: 
     break 

Вот код playWav2:

""" Play a WAVE file. """ 

import pyaudio 
import wave 

chunk = 1024 

def play(song): 
    wf = wave.open(song, 'rb') 
    p = pyaudio.PyAudio() 

    # open stream 
    stream = p.open(format = p.get_format_from_width(wf.getsampwidth()), 
       channels = wf.getnchannels(), 
       rate = wf.getframerate(), 
       output = True) 

    # read data 
    data = wf.readframes(chunk) 

    # play stream 
    while data != '': 
     stream.write(data) 
     data = wf.readframes(chunk) 
    stream.stop_stream() 
    stream.close() 
    p.terminate() 
+2

Каков минимальный скрипт, который не работает? См. [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) –

+0

Поиск [playWav2] (https://www.google.co.uk/search?q= playWav2 + python) появляется три ссылки, одна из которых является вопросом –

+0

Эй! Это простой сценарий, который я сделал, чтобы увидеть, продолжит ли он воспроизведение WAV. 'Импорт playWav2 в PW pw.play ("Добро пожаловать в Paradise.wav") печать ("сделал это работает?")' – AaronK5521

ответ

0

ошибка не в коде выше, но в ваш модуль playWav2

как вы перечисляете pyaudio в качестве ссылки, посмотрите на The example on the pyaudio page, специально как пример заканчивается ..

Или обеспечить треску e для playWav2.

+0

playWav2 код: '' импорт pyaudio импорта волна ломоть = 1024 защиту играть (песня): Wf = wave.open (песня, 'Р.Б.') р = pyaudio.PyAudio() поток = p.open (формат = p.get_format_from_width (wf.getsampwidth()), channels = wf.getnchannels(), rate = wf.getframerate(), output = True) данных = wf.readframes (порций) в то время как данные = '': stream.write (данные) данные = wf.readframes (фрагмент) stream.stop_stream() stream.close() р .terminate() '' – AaronK5521

+0

Как вы, наверное, уже знаете, правильный отступ имеет решающее значение для python. Вам нужно обновить свой вопрос, если комментарий не позволит вам вставить код с правильным форматированием. – jogco

+0

Извините, я совершенно не знаком с этим сайтом. Как мне получить правильное форматирование в моих комментариях? – AaronK5521