2016-10-02 10 views
1

私は現時点では、オーディオファイルをサンプリングし、サンプリングの情報をtxtファイルに保存しようとしています。pythonで完全な配列をtxtとして保存する

サンプリングは、librosaを使用して行われます。

ファイルに保存すると問題が発生します... アレイが完全に保存されず、サンプリングポイントの一部しか表示できず、残りが点滅します。

例:

22050.000 
[ -8.61534572e-05 -1.64340396e-04 -8.03423245e-05 ..., -1.40137578e-04 
    -3.71412549e-04 -5.04361582e-04] 

これは私がそれをやっている方法です:私はいくつかのではなく、すべてのサンプルポイントを保存することはできません理由を説明することができ

import tensorflow as tf 
import numpy as np 
import librosa 
from os import listdir 
from os.path import isfile, join 
import os 



path_train = "/home/k/kaldi-trunk/egs/start/s5/data/train" 
path_test = "/home/k/kaldi-trunk/egs/start/s5/data/test" 
dnn_train = "/home/k/kaldi-trunk/dnn/train/" 
dnn_test = "/home/k/kaldi-trunk/dnn/test/" 
dnn = "/home/k/kaldi-trunk/dnn/" 
path = "/home/k/kaldi-trunk/egs/start/s5/data/" 
train_filelist = path_train+"/wav_train.txt" 
test_filelist = path_test+"/wav_test.txt" 

    files_train = [f for f in listdir(dnn_train) if isfile(join(dnn_train, f))] 
    files_test = [f for f in listdir(dnn_test) if isfile(join(dnn_test, f))] 

    os.chdir(dnn_train) 
    train = [] 
    test = [] 


    for line in files_train: 
     #print dnn_train+line 
     y,sr=librosa.core.load(dnn_train+line) 
     train.append(y.tolist()) 

    print "Train done!" 

    for line in files_test: 
     x,sr=librosa.core.load(dnn_test+line) 
     test.append(x.tolist()) 

    print "Test done!" 

    os.chdir(dnn) 

    with open('sample_test.txt','wb') as f: 
     np.savetxt(f,test) 

    with open('sample_train.txt','wb') as f: 
     np.savetxt(f,train) 

何か?

希望する出力は、各行にリストが含まれる2つの別々のファイル[sample_test、sample_train] です。 リストの各エントリには小数点以下が含まれている必要があります。そのため、浮動小数点または倍精度として格納されていることがわかります。

+0

ファイルサイズは出力に影響しますか? –

+0

私は質問を理解しているか分からない。 私はそれを指定していない。 –

+0

'test'変数と' train'変数はどのような形式ですか?私が尋ねる理由は、コードが値の長いリストとして作成するように見えるが、 'np.savetxt()'の呼び出しでは、2つのフォーマット文字列 '%10s'と'%10.3f'を渡す。あなたは、リスト内の各アイテムがそれ自体2つのアイテムのリストであることを期待していますか?他のすべてのコードを削除して、壊れた例を残しておくこともできます(たとえば、適切なディメンションのランダムなリストを作成して保存するなど)。 – kabdulla

答えて

0

np.savetxtの引数は配列でなければなりません。

データを保存する前にtest = np.array(test)を追加してください。

  1. データを配列に変換できない場合、エラーが発生します。
  2. あなたは、診断のために、配列の形状を印刷することができます。print test.shape

あなたの出力は、あなたがnumpyの配列の内容の代わりに印刷されたフロートと、あなたのデータでリストを、持っていることを示唆しています。

関連する問題