0
votes

Comment puis-je lire un fichier audio à l'aide de flux?

Je cherche actuellement à l'extérieur pour diffuser des fichiers audio. J'aimerais lire x des quantités de quelques secondes à partir d'un fichier .wav donné, faire ma tâche d'analyse et répéter .....

Voici un code pour obtenir l'idée de ce que je veux: p>

`read_x_seconds = 30
 file_length_in_min = 15
 for x in range(file_length_in_min * (60 / read_x_seconds)):
    y, fs = librosa.core.load(FILENAME, offset=x * read_x_seconds,
    duration=read_x_seconds)
    do_analysis(y, fs)`


1 commentaires

L'audio est-il un flux? Ou vous avez simplement un fichier hors ligne que vous souhaitez traiter en morceaux?


3 Réponses :


0
votes
with open(stream_file, 'rb') as audio_file:
    content = audio_file.read(BYTES_PER_SECOND)

5 commentaires

Dans la documentation de io.bytesio, il est écrit, que io.bytesio () utilise une liste des initiales_bytes, pas un fichier_path .


Voir la réponse modifiée, si vous avez un fichier local, vous pouvez simplement l'ouvrir en mode "RB"


Je ne pense pas que cela fonctionnerait que OP a l'intention. Pour Starter, vous manquez l'en-tête, qui est 44 ou 46 octets, selon le fichier. Il n'y a pas de décalage aussi.


Cela ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements d'un auteur, laissez un commentaire sous leur poste. - de l'avis


@ L.f. - Oui. Ce n'est peut-être pas une bonne réponse, mais c'est pas quelle est la file d'attente VLQ.



1
votes

En supposant que nous envisagons de lire un cas de lecture d'une pièce de fichier WAV local: xxx pré>

Comment l'utiliser: p>

audio_chunk, fs = read_wav_part_from_local('your.wav', offset_in_s, duration_in_s)


2 commentaires

Le problème avec votre solution est que les valeurs résultantes ne sont pas comprises entre -1 et 1.


@Felixhohnstein Vous n'avez pas précisé que vous l'aimeriez entre -1 et 1, sans échelle. Vous pouvez les accélérer en divisant le vecteur par un maximum absolu de ce vecteur, c'est-à-dire wav_array = np.max (np.abs (wav_array)) .



0
votes

J'ai deux solutions pour la lecture / la diffusion de fichiers WAV en streaming de blocs.

Ceci est le numéro un. Je l'ai écrit moi-même, alors ne le relâchez pas. P>

def soundfile_gen(path):
    window_s = 10
    samplerate = sf.info(path).samplerate
    blocksize = samplerate * window_s
    block_gen = sf.blocks(path, blocksize=blocksize)
    return block_gen


0 commentaires