2016-05-04 11 views
1

Ich versuche, die Ausgabe von aplay zu unterdrücken, aber ohne Erfolg. Ich kann Druckanweisungen mit stdout unterdrücken, aber ich habe nicht herausgefunden, wie man das gleiche Ergebnis mit pydub Modul archiviert. Zum Beispiel, wenn ich spiele einen Ton mit diesem CodePydub und Aplay: verbose Ausgabe unterdrücken?

from pydub import AudioSegment 
from pydub.playback import play 

next_kot = AudioSegment.from_ogg('/home/effe/Voz/Hello.ogg') 
play(next_kot) 

Der Ausgang erzeugt (in rot!) Ist

avplay version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2003-2014 the Libav developers built on Mar 16 2015 13:19:10 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1) Input #0, wav, from '/tmp/tmp5DUj0a.wav':
Duration: 00:00:01.32, bitrate: 1411 kb/s Stream #0.0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s

Wenn Sie mehr Audio ist einfach verketten die wichtigsten Informationen zu verlieren. Gibt es eine Möglichkeit, diese Art von Ausgabe zu unterbrechen?

Danke.

+0

@Jiaaro: irgendeinen Anhaltspunkt? –

Antwort

1

ich lief in dieser gleiche Ausgabe e und hier ist was ich getan habe. Sie können einfach eine neue Funktion mit dem Namen _play_with_ffplay_suppress erstellen und den folgenden Code enthalten. Die Differenz zwischen der Antwort oben und ich ist, dass Jiaaro

verwendet
stdout=open(os.devnull, 'w') 
stderr=os.stdout 

und ich „devnull“ nach einer Variablen mit dem gleichen Namen zu erstellen. Sehr kleiner Unterschied, aber ich hoffe, es löst den Fehler, den Sie in dem Kommentar erwähnt haben.

stderr=devnull 
stdout=devnull 

Hier ist mein Code:

#rhp - additional import added 
import os 

#rhp-custom function to supress output while playing mp3 files 
def _play_with_ffplay_suppress(seg): 
    with NamedTemporaryFile("w+b", suffix=".wav") as f: 
     seg.export(f.name, "wav") 
     devnull = open(os.devnull, 'w') 
     subprocess.call([PLAYER,"-nodisp", "-autoexit", "-hide_banner", f.name],stdout=devnull, stderr=devnull) 

Für weitere Informationen können Sie über die Anruffunktion in dem Subprozess-Modul in Python hier https://docs.python.org/3/library/subprocess.html lesen.

+0

Einfach und effektiv. Ich weiß nicht, warum ich nicht darüber nachgedacht habe. –

1

die Wiedergabe-Funktionen sind wirklich einfach (und vor allem für die einfachen Gebrauch in dem interaktiven Python-Shell enthalten) - Ihre beste Wette wahrscheinlich eine Kopie der playback code zu machen ist, die besser auf Ihre Bedürfnisse geeignet ist:

, wenn Sie ‚re mit ffplay sollte diese Arbeit:

import os 
from pydub.utils import get_player_name 

PLAYER = get_player_name() 

def play_with_ffplay(seg): 
    with NamedTemporaryFile("w+b", suffix=".wav") as f: 
     seg.export(f.name, "wav") 
     subprocess.call(
      [PLAYER, "-nodisp", "-autoexit", f.name], 
      stdout=open(os.devnull, 'w'), 
      stderr=os.stdout 
     ) 

Anmerkung: obwohl ffmpeg wird immer für ffplay ein neues Fenster öffnen - ich würde empfehlen pyaudio die Installation und Nutzung der für die Wiedergabe statt

+0

stderr = os.stdout AttributError: 'Modul' Objekt hat kein Attribut 'stdout' –