質問編集履歴
9
ループを止めるメソッドを追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
### 前提(質問までに至るまでの過程)
|
2
2
|
更新箇所
|
3
3
|
・一応、回答を見た後に作ったソースコードを掲載。
|
4
|
+
+ループを止めるメソッド追加
|
4
5
|
・本文が10000文字以上になったらしい…ので一部いらない所修正。
|
5
6
|
・一番最初のwav → mp3へと変換した際にカットしている事を伝え忘れていた。
|
6
7
|
・無音分が増えたと分かってからは毎回カットしている。
|
@@ -214,11 +215,6 @@
|
|
214
215
|
AudioStreamは、ヘッダー等は飛ばされるような記事みた気もするけれど。
|
215
216
|
0.051秒分飛ばして、そこからmp3の長さ-0.051秒間分ダンプ分ダンプする。
|
216
217
|
|
217
|
-
抽出について、この情報が合っている事前提で一応進めていく…
|
218
|
-
これが合ってないと、また調べる所からになります。
|
219
|
-
|
220
|
-
waveとbyteについて調べていきます。
|
221
|
-
|
222
218
|
問題点その1 の解決策を探しています。
|
223
219
|
未だに取っ掛かりすらありません。
|
224
220
|
|
@@ -274,6 +270,7 @@
|
|
274
270
|
(ゲームで使用させて頂いています)
|
275
271
|
色んな用途に使えるように、ファイルパスだけ渡せば
|
276
272
|
簡易プレイヤーとして活用できるようなクラスにしました。
|
273
|
+
+ループを止めるメソッドを追加しました。
|
277
274
|
|
278
275
|
ゲームの場合マルチスレッド何たら等
|
279
276
|
書いてある記事もありましたが
|
@@ -341,7 +338,7 @@
|
|
341
338
|
}
|
342
339
|
}
|
343
340
|
|
344
|
-
|
341
|
+
public void sStop() {
|
345
342
|
try {
|
346
343
|
clip.close();
|
347
344
|
dataIn.close();
|
@@ -350,5 +347,9 @@
|
|
350
347
|
e.printStackTrace();
|
351
348
|
}
|
352
349
|
}
|
350
|
+
|
351
|
+
public void loopStop() {
|
352
|
+
clip.loop(0);
|
353
|
+
}
|
353
354
|
}
|
354
355
|
```
|
8
回答を見た後にソースコードを作ってみた
title
CHANGED
File without changes
|
body
CHANGED
@@ -270,7 +270,8 @@
|
|
270
270
|
JavaでBGMをラグなくループする方法は
|
271
271
|
oggを使うと良い事が分かりました。
|
272
272
|
|
273
|
-
### 一応
|
273
|
+
### 一応 回答を見た後に作ってみました
|
274
|
+
(ゲームで使用させて頂いています)
|
274
275
|
色んな用途に使えるように、ファイルパスだけ渡せば
|
275
276
|
簡易プレイヤーとして活用できるようなクラスにしました。
|
276
277
|
|
7
回答後に作ったソースコードを追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
### 前提(質問までに至るまでの過程)
|
2
2
|
更新箇所
|
3
|
+
・一応、回答を見た後に作ったソースコードを掲載。
|
3
4
|
・本文が10000文字以上になったらしい…ので一部いらない所修正。
|
4
5
|
・一番最初のwav → mp3へと変換した際にカットしている事を伝え忘れていた。
|
5
6
|
・無音分が増えたと分かってからは毎回カットしている。
|
6
一応、完成したソースコードを乗せる
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,46 +1,23 @@
|
|
1
1
|
### 前提(質問までに至るまでの過程)
|
2
|
+
更新箇所
|
3
|
+
・本文が10000文字以上になったらしい…ので一部いらない所修正。
|
4
|
+
・一番最初のwav → mp3へと変換した際にカットしている事を伝え忘れていた。
|
5
|
+
・無音分が増えたと分かってからは毎回カットしている。
|
6
|
+
|
2
7
|
Java8 Eclipseを使用しています。
|
3
8
|
外部ライブラリはmp3をJavaで扱う為のJavazoomを使用しています。
|
4
9
|
mp3やwavファイルの曲の長さを調べる為に波形ソフトのAudacityというソフトを使用しました。
|
5
10
|
|
6
|
-
wav
|
7
|
-
MPEG1L3 44100.0 Hz, unknown bits per sample, stereo, unknown frame size, 38.28125 frames/second,
|
8
|
-
サンプリング周波数は44100khz、16bit、2ch。
|
9
|
-
|
10
|
-
mp3
|
11
|
-
Audacityでは、長さは11.623になっていた。
|
12
|
-
mp3 mediainfoというソフトにて
|
13
|
-
ながさ : 11秒 650秒
|
14
|
-
OBR モード : CBR モード
|
15
|
-
オーバルビットレート : 192 Kbps
|
16
|
-
使用したライブラリ : LAME3.100
|
17
|
-
|
18
|
-
オーディオ
|
19
|
-
フォーマット : MPEG Audio
|
20
|
-
バージョン : Version 1
|
21
|
-
プロファイル : Layer 3
|
22
|
-
設定 : Joint stereo / MS Stereo
|
23
|
-
ながさ : 11秒 651秒
|
24
|
-
ビットレートモード : CBR モード
|
25
|
-
ビットレート : 192 Kbps
|
26
|
-
チャンネル : 2 チャンネル
|
27
|
-
サンプルレート : 44.1 KHz
|
28
|
-
フレームレート : 38.281 fps (1152 SPF)
|
29
|
-
Compression mode : Lossy
|
30
|
-
ストリームサイズ : 273 KiB (100%)
|
31
|
-
使用したライブラリ : LAME3.100
|
32
|
-
エンコードライブラリの設定 : -m j -V 4 -q 3 -lowpass 18.6 -b 192
|
33
|
-
|
34
11
|
初めてJavaでゲーム制作をしています。(ドラクエ1レベル程度の内容)
|
35
12
|
フリー音源を集めてBGMを鳴らそうと思ったのですが
|
36
13
|
mp3だと再生できないので、オーディオデータをwavに変換しました。
|
37
14
|
Clipでwavを鳴らしてみると、とても簡単に実装できました。
|
38
15
|
BGMもいつループしたのか分からない程スムーズにループしていました。
|
16
|
+
(mp3 → wavにした際、カットしてます)
|
39
17
|
|
40
18
|
しかし、そこで問題が発生しました。
|
41
19
|
容量が全部合わせて1GB以上(曲)+200MB(効果音)になりました。
|
42
20
|
mp3だとその4分の1くらいです。
|
43
|
-
|
44
21
|
ならば、mp3で再生できればと思い調べてみました。
|
45
22
|
|
46
23
|
①JAVAFXを使用しました。
|
@@ -62,6 +39,7 @@
|
|
62
39
|
無音が前後に挿入されてしまうという事も知りました。
|
63
40
|
波形ソフトで見ると、mp3→wav(その逆も)に変換したものには前後に無音が挿入されていました。
|
64
41
|
|
42
|
+
(変換プログラムにも、無音が挿入されてしまっていた)
|
65
43
|
曲の長さも増えていました。全体 曲頭 曲後
|
66
44
|
11秒623→11秒677 +0.054秒 +0.051 +0.003
|
67
45
|
18秒099→18秒155 +0.056秒 +0.051 +0.005
|
@@ -125,8 +103,6 @@
|
|
125
103
|
JAVAでどうカットすればいいのか、オーディオデータを取り扱っている記事が
|
126
104
|
無く困っています。サンプルコード無いと何も出来ないへっぽこなので
|
127
105
|
非常に困っています…
|
128
|
-
手前から1秒カットする、後ろから3秒カットする、等の記事を探していましたが
|
129
|
-
見つかりませんでした…
|
130
106
|
|
131
107
|
mp3で11.623秒の曲を変換すると11.677秒になりました。差は0.054秒です。
|
132
108
|
0.051を頭からカットします。0.054-0.051=0.003秒を曲の後ろからカットします。
|
@@ -229,26 +205,6 @@
|
|
229
205
|
```
|
230
206
|
|
231
207
|
### 試行錯誤中
|
232
|
-
今私が試行錯誤している事を記載していきます。
|
233
|
-
間違っていたり、それは違うよ、等ツッコミ下さい。
|
234
|
-
|
235
|
-
問題点その2・3 の解決策を探しています。
|
236
|
-
wavのデータを解析していく。
|
237
|
-
byteに変換して、byteを削除していく…?
|
238
|
-
wavファイルの構成は
|
239
|
-
|
240
|
-
引用
|
241
|
-
「wavファイルは、次のヘッダーから必ず始まります。
|
242
|
-
文字列 RIFF (4byte)
|
243
|
-
これ以降チャンクのサイズ (4byte)
|
244
|
-
文字列WAVE (4byte)
|
245
|
-
|
246
|
-
チャンク
|
247
|
-
チャンク名(4byte)
|
248
|
-
これ以降のチャンクのサイズ(4byte)
|
249
|
-
内容」
|
250
|
-
となっている。
|
251
|
-
|
252
208
|
「EDIT40秒部分の抽出について
|
253
209
|
デコーダの出力はpcmサンプルです。 入力が16ビットステレオ44100Hzの場合、各フレームは16ビット×2チャンネル= 4バイト、1秒は44100×4バイトです。目的の部分が始まるまで必要なだけ出力バイトをスキップし、次に44100 * 4 * 40バイトを40秒間ダンプします。モノラルにミキシングしてから8ビットにカットすることもできます。 」
|
254
210
|
|
@@ -263,17 +219,8 @@
|
|
263
219
|
waveとbyteについて調べていきます。
|
264
220
|
|
265
221
|
問題点その1 の解決策を探しています。
|
266
|
-
mp3の長さは、Audacityだと11.623秒。
|
267
|
-
|
222
|
+
未だに取っ掛かりすらありません。
|
268
|
-
mp3を測定するプログラムだと11.677秒。
|
269
|
-
頭の無音は0.051秒
|
270
|
-
後ろの無音は…波形ソフトで測るしかない。
|
271
223
|
|
272
|
-
ここさえ求まれば…
|
273
|
-
11.677秒から逆に11.623秒を求める事は出来るのか?
|
274
|
-
|
275
|
-
ですが、未だに取っ掛かりすらありません。
|
276
|
-
|
277
224
|
### 補足
|
278
225
|
プログラミングはJavaが初めてのJavaを初めて5ヵ月と31日です。
|
279
226
|
ゲーム制作も今回が初めてです。
|
@@ -312,14 +259,94 @@
|
|
312
259
|
との事です。
|
313
260
|
oggもmp3と同じだと思っていました…
|
314
261
|
|
315
|
-
|
316
|
-
|
317
262
|
### 結論
|
318
263
|
JAVAでmp3をラグなくループする方法
|
319
|
-
沢山の記事を探しましたが
|
264
|
+
沢山の記事を探しましたが見つかりませんでした。
|
320
265
|
wavに変換して、それを編集するくらいしか思いつきません。
|
321
266
|
挿入される無音部分の計算も出来ていないので
|
322
267
|
自分には難しかったみたいです。
|
323
268
|
|
324
269
|
JavaでBGMをラグなくループする方法は
|
325
|
-
oggを使いまし
|
270
|
+
oggを使うと良い事が分かりました。
|
271
|
+
|
272
|
+
### 一応 完成したクラス張ってみます。
|
273
|
+
色んな用途に使えるように、ファイルパスだけ渡せば
|
274
|
+
簡易プレイヤーとして活用できるようなクラスにしました。
|
275
|
+
|
276
|
+
ゲームの場合マルチスレッド何たら等
|
277
|
+
書いてある記事もありましたが
|
278
|
+
必要になったら学ぶ予定…
|
279
|
+
```java
|
280
|
+
|
281
|
+
/*
|
282
|
+
* MusicPlayerクラスです。
|
283
|
+
* このクラスは他プロジェクトでも汎用性があるように作られたクラスです。
|
284
|
+
* Java sound apiで再生できるデータ(wav、raw、midi)があるファイルの場所を
|
285
|
+
* コンストラクタで受け取ります。
|
286
|
+
* MusicPlayerクラスのsPlayメソッドで曲を再生します。
|
287
|
+
* MusicPlayerクラスのsStopメソッドで曲を停止します。
|
288
|
+
*
|
289
|
+
* 追伸:
|
290
|
+
* 外部ライブラリJavazoomをプロジェクトに入れるとmp3も再生されます。
|
291
|
+
* 外部ライブラリjorbisをプロジェクトに入れるとoggも再生されます。
|
292
|
+
* */
|
293
|
+
|
294
|
+
import java.io.File;
|
295
|
+
import java.io.IOException;
|
296
|
+
|
297
|
+
import javax.sound.sampled.AudioFormat;
|
298
|
+
import javax.sound.sampled.AudioInputStream;
|
299
|
+
import javax.sound.sampled.AudioSystem;
|
300
|
+
import javax.sound.sampled.Clip;
|
301
|
+
import javax.sound.sampled.LineUnavailableException;
|
302
|
+
import javax.sound.sampled.UnsupportedAudioFileException;
|
303
|
+
|
304
|
+
public class MusicPlayer {
|
305
|
+
private File musicData;
|
306
|
+
private AudioInputStream in;
|
307
|
+
private AudioInputStream dataIn;
|
308
|
+
private Clip clip;
|
309
|
+
|
310
|
+
public MusicPlayer(File musicData) {
|
311
|
+
this.musicData = musicData;
|
312
|
+
fileDataReading();
|
313
|
+
}
|
314
|
+
|
315
|
+
public void fileDataReading() {
|
316
|
+
try {
|
317
|
+
in = AudioSystem.getAudioInputStream(musicData);
|
318
|
+
} catch (UnsupportedAudioFileException | IOException e) {
|
319
|
+
e.printStackTrace();
|
320
|
+
}
|
321
|
+
AudioFormat baseFormat = in.getFormat();
|
322
|
+
AudioFormat targetFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
|
323
|
+
baseFormat.getSampleRate(), 16,
|
324
|
+
baseFormat.getChannels(),
|
325
|
+
baseFormat.getChannels() * 2,
|
326
|
+
baseFormat.getSampleRate(), false);
|
327
|
+
dataIn = AudioSystem.getAudioInputStream(targetFormat, in);
|
328
|
+
}
|
329
|
+
|
330
|
+
public void sPlay() {
|
331
|
+
try {
|
332
|
+
clip = AudioSystem.getClip();
|
333
|
+
clip.open(dataIn);
|
334
|
+
clip.loop(Clip.LOOP_CONTINUOUSLY);
|
335
|
+
} catch (LineUnavailableException e) {
|
336
|
+
e.printStackTrace();
|
337
|
+
} catch (IOException e) {
|
338
|
+
e.printStackTrace();
|
339
|
+
}
|
340
|
+
}
|
341
|
+
|
342
|
+
public void sStop() {
|
343
|
+
try {
|
344
|
+
clip.close();
|
345
|
+
dataIn.close();
|
346
|
+
in.close();
|
347
|
+
} catch (IOException e) {
|
348
|
+
e.printStackTrace();
|
349
|
+
}
|
350
|
+
}
|
351
|
+
}
|
352
|
+
```
|
5
ベストアンサー前に調べたこと、試した事の情報整理
title
CHANGED
File without changes
|
body
CHANGED
@@ -286,4 +286,40 @@
|
|
286
286
|
|
287
287
|
そして、もし、こんな周りくどい事をしなくても
|
288
288
|
Javaでmp3のループ再生がラグなく出来るのでしたら
|
289
|
-
教えて頂ければ幸いです…
|
289
|
+
教えて頂ければ幸いです…
|
290
|
+
|
291
|
+
### ogg について
|
292
|
+
Java sound api でoggを取り扱う為のライブラリー下記2種。
|
293
|
+
JOrbis:Javaで実装されたoggファイル再生ライブラリ
|
294
|
+
JOgg:JOrbisを使用したOggファイル再生プレーヤー
|
295
|
+
を追加しまして
|
296
|
+
|
297
|
+
TN8001様のサンプルコードを実行しました。
|
298
|
+
ラグなくループ再生出来ました。
|
299
|
+
|
300
|
+
|
301
|
+
https://soundengine.jp/wordpress/tips/glossary/454/ から引用
|
302
|
+
「非圧縮の音声ファイルに比べ、ファイルサイズを小さくできる。
|
303
|
+
圧縮前の音を完全に再現できない。(非可逆圧縮)
|
304
|
+
ライセンスの制限が緩やかなので、PCゲームによく利用されている。
|
305
|
+
ギャップレス再生に対応」
|
306
|
+
|
307
|
+
→「ギャップレス再生に対応」
|
308
|
+
|
309
|
+
さらに引用
|
310
|
+
「Oggは同ビットレートのMP3よりも聴感上良い音で再生でき、さらに、AACやWMAなど、他の非可逆圧縮の形式と比較しても引けを取らないようです。特に低ビットレートではその性能は高く評価されています。」
|
311
|
+
|
312
|
+
との事です。
|
313
|
+
oggもmp3と同じだと思っていました…
|
314
|
+
|
315
|
+
|
316
|
+
|
317
|
+
### 結論
|
318
|
+
JAVAでmp3をラグなくループする方法
|
319
|
+
沢山の記事を探しましたがどれも見つかりませんでした。
|
320
|
+
wavに変換して、それを編集するくらいしか思いつきません。
|
321
|
+
挿入される無音部分の計算も出来ていないので
|
322
|
+
自分には難しかったみたいです。
|
323
|
+
|
324
|
+
JavaでBGMをラグなくループする方法は
|
325
|
+
oggを使いましょう。
|
4
試行錯誤中 更新
title
CHANGED
File without changes
|
body
CHANGED
@@ -232,6 +232,7 @@
|
|
232
232
|
今私が試行錯誤している事を記載していきます。
|
233
233
|
間違っていたり、それは違うよ、等ツッコミ下さい。
|
234
234
|
|
235
|
+
問題点その2・3 の解決策を探しています。
|
235
236
|
wavのデータを解析していく。
|
236
237
|
byteに変換して、byteを削除していく…?
|
237
238
|
wavファイルの構成は
|
@@ -261,8 +262,18 @@
|
|
261
262
|
|
262
263
|
waveとbyteについて調べていきます。
|
263
264
|
|
265
|
+
問題点その1 の解決策を探しています。
|
266
|
+
mp3の長さは、Audacityだと11.623秒。
|
267
|
+
wavだと11.677秒。
|
268
|
+
mp3を測定するプログラムだと11.677秒。
|
269
|
+
頭の無音は0.051秒
|
270
|
+
後ろの無音は…波形ソフトで測るしかない。
|
264
271
|
|
272
|
+
ここさえ求まれば…
|
273
|
+
11.677秒から逆に11.623秒を求める事は出来るのか?
|
265
274
|
|
275
|
+
ですが、未だに取っ掛かりすらありません。
|
276
|
+
|
266
277
|
### 補足
|
267
278
|
プログラミングはJavaが初めてのJavaを初めて5ヵ月と31日です。
|
268
279
|
ゲーム制作も今回が初めてです。
|
3
思考錯誤中の内容を更新
title
CHANGED
File without changes
|
body
CHANGED
@@ -229,6 +229,10 @@
|
|
229
229
|
```
|
230
230
|
|
231
231
|
### 試行錯誤中
|
232
|
+
今私が試行錯誤している事を記載していきます。
|
233
|
+
間違っていたり、それは違うよ、等ツッコミ下さい。
|
234
|
+
|
235
|
+
wavのデータを解析していく。
|
232
236
|
byteに変換して、byteを削除していく…?
|
233
237
|
wavファイルの構成は
|
234
238
|
|
@@ -247,14 +251,18 @@
|
|
247
251
|
「EDIT40秒部分の抽出について
|
248
252
|
デコーダの出力はpcmサンプルです。 入力が16ビットステレオ44100Hzの場合、各フレームは16ビット×2チャンネル= 4バイト、1秒は44100×4バイトです。目的の部分が始まるまで必要なだけ出力バイトをスキップし、次に44100 * 4 * 40バイトを40秒間ダンプします。モノラルにミキシングしてから8ビットにカットすることもできます。 」
|
249
253
|
|
254
|
+
44100Hz、2ch、16ビットはそのままなので問題はないはず。
|
250
255
|
との事で、内容までのbyteを飛ばして、無音分を計算し飛ばす。
|
251
256
|
AudioStreamは、ヘッダー等は飛ばされるような記事みた気もするけれど。
|
252
257
|
0.051秒分飛ばして、そこからmp3の長さ-0.051秒間分ダンプ分ダンプする。
|
253
258
|
|
254
|
-
|
259
|
+
抽出について、この情報が合っている事前提で一応進めていく…
|
255
|
-
|
260
|
+
これが合ってないと、また調べる所からになります。
|
256
|
-
もう一度更新。
|
257
261
|
|
262
|
+
waveとbyteについて調べていきます。
|
263
|
+
|
264
|
+
|
265
|
+
|
258
266
|
### 補足
|
259
267
|
プログラミングはJavaが初めてのJavaを初めて5ヵ月と31日です。
|
260
268
|
ゲーム制作も今回が初めてです。
|
2
思考錯誤中を追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -228,6 +228,33 @@
|
|
228
228
|
|
229
229
|
```
|
230
230
|
|
231
|
+
### 試行錯誤中
|
232
|
+
byteに変換して、byteを削除していく…?
|
233
|
+
wavファイルの構成は
|
234
|
+
|
235
|
+
引用
|
236
|
+
「wavファイルは、次のヘッダーから必ず始まります。
|
237
|
+
文字列 RIFF (4byte)
|
238
|
+
これ以降チャンクのサイズ (4byte)
|
239
|
+
文字列WAVE (4byte)
|
240
|
+
|
241
|
+
チャンク
|
242
|
+
チャンク名(4byte)
|
243
|
+
これ以降のチャンクのサイズ(4byte)
|
244
|
+
内容」
|
245
|
+
となっている。
|
246
|
+
|
247
|
+
「EDIT40秒部分の抽出について
|
248
|
+
デコーダの出力はpcmサンプルです。 入力が16ビットステレオ44100Hzの場合、各フレームは16ビット×2チャンネル= 4バイト、1秒は44100×4バイトです。目的の部分が始まるまで必要なだけ出力バイトをスキップし、次に44100 * 4 * 40バイトを40秒間ダンプします。モノラルにミキシングしてから8ビットにカットすることもできます。 」
|
249
|
+
|
250
|
+
との事で、内容までのbyteを飛ばして、無音分を計算し飛ばす。
|
251
|
+
AudioStreamは、ヘッダー等は飛ばされるような記事みた気もするけれど。
|
252
|
+
0.051秒分飛ばして、そこからmp3の長さ-0.051秒間分ダンプ分ダンプする。
|
253
|
+
|
254
|
+
byteについて調べていく。
|
255
|
+
+何故か更新したはずなのに更新されていないので
|
256
|
+
もう一度更新。
|
257
|
+
|
231
258
|
### 補足
|
232
259
|
プログラミングはJavaが初めてのJavaを初めて5ヵ月と31日です。
|
233
260
|
ゲーム制作も今回が初めてです。
|
1
mp3の情報の追加。cbrに変換してもmp3の長さではなかった。
title
CHANGED
File without changes
|
body
CHANGED
@@ -7,6 +7,30 @@
|
|
7
7
|
MPEG1L3 44100.0 Hz, unknown bits per sample, stereo, unknown frame size, 38.28125 frames/second,
|
8
8
|
サンプリング周波数は44100khz、16bit、2ch。
|
9
9
|
|
10
|
+
mp3
|
11
|
+
Audacityでは、長さは11.623になっていた。
|
12
|
+
mp3 mediainfoというソフトにて
|
13
|
+
ながさ : 11秒 650秒
|
14
|
+
OBR モード : CBR モード
|
15
|
+
オーバルビットレート : 192 Kbps
|
16
|
+
使用したライブラリ : LAME3.100
|
17
|
+
|
18
|
+
オーディオ
|
19
|
+
フォーマット : MPEG Audio
|
20
|
+
バージョン : Version 1
|
21
|
+
プロファイル : Layer 3
|
22
|
+
設定 : Joint stereo / MS Stereo
|
23
|
+
ながさ : 11秒 651秒
|
24
|
+
ビットレートモード : CBR モード
|
25
|
+
ビットレート : 192 Kbps
|
26
|
+
チャンネル : 2 チャンネル
|
27
|
+
サンプルレート : 44.1 KHz
|
28
|
+
フレームレート : 38.281 fps (1152 SPF)
|
29
|
+
Compression mode : Lossy
|
30
|
+
ストリームサイズ : 273 KiB (100%)
|
31
|
+
使用したライブラリ : LAME3.100
|
32
|
+
エンコードライブラリの設定 : -m j -V 4 -q 3 -lowpass 18.6 -b 192
|
33
|
+
|
10
34
|
初めてJavaでゲーム制作をしています。(ドラクエ1レベル程度の内容)
|
11
35
|
フリー音源を集めてBGMを鳴らそうと思ったのですが
|
12
36
|
mp3だと再生できないので、オーディオデータをwavに変換しました。
|
@@ -77,18 +101,22 @@
|
|
77
101
|
### 発生している問題・エラーメッセージ・試したこと
|
78
102
|
問題点その1
|
79
103
|
mp3をAudacityで測定すると曲は11.623秒と表示されます。
|
80
|
-
しかし、
|
104
|
+
しかし、Mediainfoというソフトでmp3を見ると11秒650と表示されます。
|
105
|
+
|
81
106
|
Javaでmp3の曲の長さを調べるプログラムが記事に載っていたので試すと
|
82
107
|
(外部ライブラリJavazoom必要かも…)
|
83
108
|
File file = new File("filename.mp3");
|
84
109
|
AudioFileFormat baseFileFormat = new MpegAudioFileReader().getAudioFileFormat(file);
|
85
110
|
Map properties = baseFileFormat.properties();
|
86
111
|
Long duration = (Long) properties.get("duration");
|
87
|
-
duration = 11651000 と表示されます。11.651秒?
|
88
|
-
正確に11.623秒と求めたいのですが、Java sound api の標準のメソッドを
|
89
|
-
用いても-1と出ます。その為の上のプログラムなのですが思っていた値と違うようで…
|
90
|
-
他の方法を調べても、他にありませんでした…
|
91
112
|
|
113
|
+
duration = 11677000になりました。
|
114
|
+
なりましたが…それはwavに変換した際のAudacityで調べた長さと一緒でした。
|
115
|
+
変換前の値は11.623秒なので、mp3の長さが
|
116
|
+
duration = 11623000となってほしいです…
|
117
|
+
Javaでmp3の取り扱いが少なく、さらに曲の長さを求めるサンプルコードは
|
118
|
+
これくらいしかありませんでした…(Java sound api のメソッドだと-1になる)
|
119
|
+
|
92
120
|
問題点その2と3
|
93
121
|
曲の頭から 0.051秒カット
|
94
122
|
曲の後ろから wavの長さ - mp3の長さ - 0.051 秒分をカット
|