Dossier haut-parleurs de sortie avec PyAudio
Je suis en train d'enregistrer la sortie de mes haut-parleurs d'ordinateur avec PyAudio. J'ai essayé de modifier le code de l'exemple donné dans le PyAudio de la documentation, mais il ne fonctionne pas. Voici mon code:
import pyaudio
import wave
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"
p = pyaudio.PyAudio()
SPEAKERS = p.get_default_output_device_info()["hostApi"] #The part I have modified
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK,
input_host_api_specific_stream_info=SPEAKERS) #The part I have modified
print("* recording")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print("* done recording")
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
Quelqu'un pourrait m'aider s'il vous plaît?
Bienvenue à Stack Overflow. Pourriez-vous décrire de quelle façon il ne fonctionne pas? Aussi, c'est une bonne idée de mettre le code dans la question elle-même plutôt que sur un autre site. Pour plus d'informations, veuillez prendre le tour. Merci!
Techniquement, il n'y a pas d'erreur. Je obtenir le fichier de sortie.wav, je peux l'ouvrir, mais il n'y a pas de son. Sur Audacity, je ne peux voir qu'une ligne droite.
Techniquement, il n'y a pas d'erreur. Je obtenir le fichier de sortie.wav, je peux l'ouvrir, mais il n'y a pas de son. Sur Audacity, je ne peux voir qu'une ligne droite.
OriginalL'auteur Openclosed | 2014-10-26
Vous devez vous connecter pour publier un commentaire.
Au cas où quelqu'un est toujours buter sur ce comme moi, j'ai trouvé un PyAudio fourche pour enregistrer la sortie sur windows. https://github.com/intxcc/pyaudio_portaudio
Explication:
Officiel PyAudio construire n'est pas en mesure d'enregistrer la sortie. MAIS avec Windows Vista et au-dessus, une nouvelle API, WASAPI a été introduit, ce qui comprend la capacité à ouvrir un flux à un périphérique de sortie en mode de bouclage. Dans ce mode, le courant sera de se comporter comme un flux d'entrée, avec la possibilité d'enregistrer les sortants flux audio.
Pour définir le mode de mettre un drapeau spécial (AUDCLNT_STREAMFLAGS_LOOPBACK, https://msdn.microsoft.com/de-de/library/windows/desktop/dd316551(v=vs. 85).aspx ). Depuis cet indicateur n'est pas pris en charge dans le officiels à construire on a besoin de modifier PortAudio ainsi que PyAudio, pour ajouter de la prise en charge de bouclage.
Nouvelle option: "as_loopback":(vrai|faux)
OriginalL'auteur mate
Vous ne pouvez pas enregistrer à partir d'un flux de sortie, comme si elle était entrée. Pour enregistrer, vous devez vous connecter PyAudio à un périphérique d'entrée, comme un microphone. Au moins c'est la façon normale de faire les choses.
Essayez de vous connecter à un microphone, d'abord, et voir si vous obtenez quelque chose. Si cela fonctionne, puis essayer de faire quelque chose d'inhabituel.
Comme une petite accélération pour votre itérations, plutôt que d'enregistrer et de regarder le fichier, il est souvent plus facile d'imprimer le max pour quelques morceaux pour vous assurer que vous apportez dans les données. Généralement il suffit de regarder les chiffres défiler et de les comparer avec le son donne une estimation rapide de savoir si les choses sont correctement connectés.
OriginalL'auteur tom10
Le haut-parleur est un flux de sortie, même si vous l'ouvrez en entrée. Le hostApi valeur de l'orateur est probablement 0.
Vous pouvez cocher la case "maxInputChannels" et " maxOutputChannels de tous les périphériques connectés et le maxInputChannels pour le haut-parleur doit être 0.
Vous ne pouvez pas écrire dans un flux d'entrée et vous ne pouvez pas lire à partir d'un flux de sortie.
Vous pouvez détecter les périphériques disponibles avec le code suivant:
Après que vous obtenez tous les périphériques connectés, vous pouvez cocher la case " hostApi de chacun des appareils.
Par exemple, si le haut-parleur de l'indice est de 5 que:
OriginalL'auteur mr.mikkancs