質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

421閲覧

音声から文字列生成を行うlstmのためのデータの前処理について

darkestscience

総合スコア0

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2023/01/16 08:54

編集2023/01/16 23:22

音楽ゲームの譜面を作るモデルを作ろうとしています。

そのデータの適切な前処理の方法についてお伺いしたいと思います。

前提

対象としている音楽ゲーム:

Osu!

一曲ごとのファイル構造

yaml

12 sogns/ 3 ├─1667560 xi - FREEDOM DiVE/ 4 ├─audio.mp3 5 ├─EykD9SkXIAA7R16.jpg 6 ├─xi - FREEDOM DiVE (Aistre) [DeviousPanda's MAXiMUM].osu 7 ├他の曲 8...

・自由なファイル名.mp3 プレイ中に流れる音楽ファイル
・自由なファイル名.jpg 背景の画像
・タイトル[難易度].osu 譜面の情報が格納されているファイル
となっており、譜面ファイル(.osu)は詳しくは以下のようになっています。

譜面の構造

https://osu.ppy.sh/wiki/en/Client/File_formats/Osu_%28file_format%29

要約:

譜面のファイルはテキストファイルであり、
ファイルの先頭でファイルフォーマットのバージョンを指定
その後は[General]といったセクションで区切られており、
使用する音楽ファイルの名前を指定するなどのメタデータやヒットオブジェクトと呼ばれるゲーム内に登場するオブジェクトの出現位置などの情報が格納されています。
ここでサンプルをダウンロードすることができます:
https://osu.ppy.sh/beatmapsets/39804#osu/126645

現在のデータセットの前処理

現在このような処理を行っています↓
https://github.com/yutadd/DL-Osu-Mapper/blob/main/Untitled.ipynb

解説

曲のディレクトリから曲が入っているサブディレクトリを一覧で取得し、
得られたディレクトリ内から.osu拡張子のファイルを取得し、
4行目にあるオーディオファイル名を取得し、
librosaを用いて、そのオーディオデータのスペクトルデータを取得し、
spect_dataset配列に追加-----------1
譜面データである.osuファイルの内容をすべてを一つの文字列としてmap_datasetに追加-----------2

作戦

このスペクトルデータ'1',譜面データ'2'をlstmを用いて学習を行い、
最終的に、スペクトルデータから譜面データを生成するモデルを作成したいと思っています。

現在書いているコード

python

1import tensorflow.keras 2import re 3import keras.layers as layers 4from keras.models import Sequential 5import librosa 6import os 7import numpy as np 8osuFilePattern=re.compile(".*\.osu$") 9FileRecordPattern=re.compile("AudioFilename:.*") 10songsPath="D:\osu\Songs" 11songs = os.listdir(songsPath) 12spect_dataset=[] 13map_dataset=[] 14songs_size=len(songs) 15loaded_size=0 16stop_loading=False 17for sname in songs: 18 if not stop_loading: 19 songFiles=os.listdir(songsPath+"\\"+sname) 20 if os.path.isdir(songsPath+"\\"+sname): 21 for fileName in songFiles: 22 if not stop_loading: 23 if osuFilePattern.match(fileName): 24 file=open(songsPath+"\\"+sname+"\\"+fileName,encoding='utf-8') 25 for _ in range(3): 26 file.readline() 27 colmn=file.readline() 28 if FileRecordPattern.match(colmn): 29 colmn=colmn.split(':')[1].strip() 30 #sr:samplerate:22050 31 #y:オーディオ時系列:1次元配列 32 y,sr=librosa.load(songsPath+"\\"+sname+"\\"+colmn,sr=16000) 33 spect_dataset.append(y) 34 print(y.shape) 35 file=open(songsPath+"\\"+sname+"\\"+fileName,encoding='utf-8') 36 map_dataset.append(file.read()) 37 loaded_size+=1 38 #読み込み制限 39 if loaded_size>=8: 40 stop_loading=True 41 break 42 else: 43 break 44 else: 45 break 46 print(str(loaded_size)+"/"+str(songs_size)+"* map per songs") 47 48#読み込み完了 49''' Failed to convert a NumPy array to a Tensor (Unsupported object type numpy.ndarray). 50spect_dataset=np.array(spect_dataset) 51map_dataset=np.array(map_dataset) 52model=Sequential() 53model.add(layers.LSTM(10)) 54model.add(layers.Dense(len(map_dataset[0]), activation='softmax')) 55model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 56model.fit(spect_dataset,map_dataset,epochs=20,batch_size=40,verbose=2) 57predicted=model.predict(spect_dataset[np.newaxis, ...]) 58print(predicted.shape) 59print(predicted) 60'''

お伺いしたいこと

前提の作戦でお話した目的を達成するためにはどのようなデータの前処理を行うべきか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PondVillege

2023/01/16 14:59

> スペクトルデータ'1',譜面データ'2'をlstmを用いて学習を行い、最終的に、スペクトルデータから譜面データを生成するモデルを作成したい seq2seqというカテゴリに属するタスクになります.「seq2seq 前処理」等でググって取り組まれている前処理を調べるのが良いと思います. あと,githubのリンク切れてて見れないです.
darkestscience

2023/01/16 23:18

なるほど、seq2seqというのですね。ありがとうございます。このキーワードを使って調べてみようと思います
guest

回答1

0

Math

1音声+文字列 = 文字列を解くと、音声 = 0

投稿2023/01/16 10:33

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問