質問編集履歴

5

前回は手動で行っていましたが、今回は録音終了時に自動でトリミングし、保存したいです。

2018/06/04 16:27

投稿

slvg8122
slvg8122

スコア6

test CHANGED
File without changes
test CHANGED
@@ -1,60 +1,50 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
-  Android Studio(Java)で、音声ファイル(wav)をトリミングするアプリを作ってす。
3
+  Android Studio(Java)で、終了後に内部ストレージから録音した音を取得し、その音声ファイルに記録されている音声=例:「◯◯ありがとう」「ありがとう◯◯」「◯◯ありがとう◯◯」などから取得したい指定の言葉(例:「ありがとう」)が含まれているか認識したあと、その指定の言葉(例:「ありがとう」)の音声のみ取得し、端末に保存したす。
4
+
5
+ ※①部分で処理を書き込みたいです。
6
+
7
+  
4
8
 
5
9
  ### 発生している問題点・エラーメッセージ
6
10
 
7
-  今現在では、RangeSeekBarを用いて、トリミングを行いたい開始時間と終了時間の取得(①)はできていますが、
8
-
9
-  その指定した区間で、ボタンクリックることでトリミングを行うにはどのようなメソッドが必要なのかわからない
11
+ 現時点他のサイト調べていまが、録音終了後に音声認識を行う処理が調べても出てこないため、どのようにしていくのかわからない状態です。
10
-
11
-  ことと、そのデータをrawディレクトリ内に入れて保存する作業ができていないのが現状の問題点です。
12
+
13
+
12
14
 
13
15
  ### ソースコード
14
16
 
15
-  ※()内はidです。
16
-
17
-  ・音声(または音楽)を開始位置を動かすために使用する(途中再生など)「seekbar(VoiceSeekBar)」
18
-
19
-  ・音声(または音楽)を再生、一時停止をするために使用するボタン「Button(start)」
20
-
21
-  ・音声(または音楽)のトリミングを開始・終了する時間を調節する「RangeSeekBar(trimmingBar)」
22
-
23
-  ・音声(または音楽)の再生時間を表示する「TextView(timeLabel)
17
+ ```Android Studio(java)
24
-
25
-  ・音声(または音楽)をトリミングするボタン「Button(trimmingButton)」
18
+
26
-
27
-  ・音声(または音楽)のトリミングを開始する時間を表示する「TextView(startTrimmingTime)」
28
-
29
-  ・音声(または音楽)のトリミングを終了する時間を表示する「TextView(stopTrimmingTime)」
30
-
31
- ```MainActivity.java
19
+ ### MainActivity.java
20
+
32
-
21
+ import android.content.Intent;
22
+
23
+ import android.media.AudioFormat;
24
+
25
+ import android.media.AudioRecord;
26
+
33
- import android.media.MediaPlayer;
27
+ import android.media.MediaRecorder;
34
28
 
35
29
  import android.os.Bundle;
36
30
 
37
- import android.os.Handler;
31
+ import android.os.Environment;
38
-
32
+
39
- import android.os.Message;
33
+ import android.speech.RecognizerIntent;
40
34
 
41
35
  import android.support.v7.app.AppCompatActivity;
42
36
 
43
37
  import android.view.View;
44
38
 
45
- import android.widget.Button;
46
-
47
- import android.widget.SeekBar;
48
-
49
39
  import android.widget.TextView;
50
40
 
51
-
52
-
53
- import com.yahoo.mobile.client.android.util.rangeseekbar.RangeSeekBar;
41
+ import android.widget.Toast;
54
-
55
-
56
-
42
+
43
+
44
+
57
- import java.io.IOException;
45
+ import java.io.File;
46
+
47
+ import java.util.ArrayList;
58
48
 
59
49
 
60
50
 
@@ -62,27 +52,23 @@
62
52
 
63
53
 
64
54
 
55
+ AudioRecord audioRecord; //録音用のオーディオレコードクラス
56
+
65
- MediaPlayer mediaPlayer = null;
57
+ MediaRecorder mediaRecorder;
58
+
66
-
59
+ final static int SAMPLING_RATE = 44100; //オーディオレコード用サンプリング周波数
60
+
61
+ private int bufSize;//オーディオレコード用バッファのサイズ
62
+
63
+ private short[] shortData; //オーディオレコード用バッファ
64
+
65
+ private MyWaveFile wav1 = new MyWaveFile();
66
+
67
- Button buttonStart;
67
+ private static final int REQUEST_CODE = 0;
68
-
69
- SeekBar VoiceseekBar;
68
+
70
-
71
- int duration;
72
-
73
- TextView timeLabel;
69
+ TextView textView;
74
-
70
+
75
- TextView startTrimming;
71
+ TextView textView2;
76
-
77
- TextView stopTrimming;
78
-
79
- String maxtimelabel;
80
-
81
- RangeSeekBar trimmingBar;
82
-
83
- Object start;
84
-
85
- Object stop;
86
72
 
87
73
 
88
74
 
@@ -96,67 +82,71 @@
96
82
 
97
83
 
98
84
 
99
- //音声(または音楽)の再生時間を表示するTextView
100
-
101
- timeLabel = (TextView) findViewById(R.id.timeLabel);
102
-
103
- //トリミングを開始する時間を表示するTextView
104
-
105
- startTrimming = (TextView) findViewById(R.id.startTrimmingTime);
106
-
107
- //トリミングを終了する時間を表示するTextView
108
-
109
- stopTrimming = (TextView) findViewById(R.id.stopTrimmingTime);
110
-
111
- //音声ファイルを取得
112
-
113
- mediaPlayer = MediaPlayer.create(this,R.raw.sample01);
114
-
115
- mediaPlayer.seekTo(0);
116
-
117
- duration = mediaPlayer.getDuration();
118
-
119
- // 音声再生シークバー
120
-
121
- VoiceseekBar = (SeekBar) findViewById(R.id.voiceSeekbar);
122
-
123
- //VoiceseekBarの最大値設定
124
-
125
- VoiceseekBar.setMax(duration);
126
-
127
- VoiceseekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
128
-
129
- //ツマミがドラッグされると呼ばれる
130
-
131
- @Override
132
-
133
- public void onProgressChanged(SeekBar seekBar, int progress, boolean input) {
134
-
135
- if(input){
136
-
137
- mediaPlayer.seekTo(progress);
138
-
139
- VoiceseekBar.setProgress(progress);
140
-
141
- }
142
-
143
- }
144
-
145
- //ツマミがタッチされた時に呼ばれる
146
-
147
- @Override
148
-
149
- public void onStartTrackingTouch(SeekBar seekBar) {
150
-
151
-
152
-
153
- }
154
-
155
- //ツマミがリリースされた時に呼ばれる
156
-
157
- @Override
158
-
159
- public void onStopTrackingTouch(SeekBar seekBar) {
85
+ initAudioRecordButton();
86
+
87
+ initAudioRecord();
88
+
89
+
90
+
91
+ }
92
+
93
+
94
+
95
+ //AudioRecordの初期化
96
+
97
+ private void initAudioRecord(){
98
+
99
+ wav1.createFile(Environment.getExternalStorageDirectory() + "/test.wav");
100
+
101
+ // AudioRecordオブジェクトを作成
102
+
103
+ bufSize = android.media.AudioRecord.getMinBufferSize(SAMPLING_RATE,
104
+
105
+ AudioFormat.CHANNEL_IN_MONO,
106
+
107
+ AudioFormat.ENCODING_PCM_16BIT);
108
+
109
+ audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
110
+
111
+ SAMPLING_RATE,
112
+
113
+ AudioFormat.CHANNEL_IN_MONO,
114
+
115
+ AudioFormat.ENCODING_PCM_16BIT,
116
+
117
+ bufSize);
118
+
119
+
120
+
121
+ shortData = new short[bufSize / 2];
122
+
123
+
124
+
125
+ // コールバックを指定
126
+
127
+ audioRecord.setRecordPositionUpdateListener(new AudioRecord.OnRecordPositionUpdateListener() {
128
+
129
+ // フレームごとの処理
130
+
131
+ @Override
132
+
133
+ public void onPeriodicNotification(AudioRecord recorder) {
134
+
135
+ // TODO Auto-generated method stub
136
+
137
+ audioRecord.read(shortData, 0, bufSize / 2); // 読み込む
138
+
139
+ wav1.addBigEndianData(shortData); // ファイルに書き出す
140
+
141
+ }
142
+
143
+
144
+
145
+ @Override
146
+
147
+ public void onMarkerReached(AudioRecord recorder) {
148
+
149
+ // TODO Auto-generated method stub
160
150
 
161
151
 
162
152
 
@@ -164,239 +154,127 @@
164
154
 
165
155
  });
166
156
 
167
- //
168
-
169
- new Thread(new Runnable() {
170
-
171
- @Override
172
-
173
- public void run() {
174
-
175
- while(mediaPlayer != null){
176
-
177
- try{
178
-
179
- Message msg = new Message();
180
-
181
- msg.what = mediaPlayer.getCurrentPosition();
182
-
183
- handler.sendMessage(msg);
184
-
185
- Thread.sleep(1000);
186
-
187
-
188
-
189
- }catch(InterruptedException e){}
190
-
191
- }
192
-
193
- }
194
-
195
- }).start();
196
-
197
- //音声(または音楽)の再生、一時停止ボタン
198
-
199
- buttonStart = (Button) findViewById(R.id.start);
200
-
201
- buttonStart.setOnClickListener(new View.OnClickListener(){
202
-
203
- @Override
204
-
205
- public void onClick(View v) {
206
-
207
- //クリック時にシークバーが動く処理(ボタンクリックでseekBarを止める(シークバーで表示(音声の現在の再生位置を取得)))
208
-
209
- VoiceseekBar.setProgress(mediaPlayer.getCurrentPosition());
210
-
211
- //音声再生、一時停止処理
212
-
213
- if (mediaPlayer.isPlaying()) {//再生中
214
-
215
- buttonStart.setText("再生");
216
-
217
- mediaPlayer.stop();
218
-
219
- try {
220
-
221
- mediaPlayer.prepare();
222
-
223
- } catch (IllegalStateException e) {
224
-
225
- e.printStackTrace();
226
-
227
- } catch (IOException e) {
228
-
229
- e.printStackTrace();
230
-
231
- }
232
-
233
- }
234
-
235
- else { //停止中
236
-
237
- buttonStart.setText("一時停止");
238
-
239
- mediaPlayer.start();
240
-
241
- }
242
-
243
-
244
-
245
-
246
-
247
- }
248
-
249
- });
250
-
251
- //トリミングシークバー
252
-
253
- trimmingBar = (RangeSeekBar) findViewById(R.id.trimmingSeekBar);
254
-
255
- trimmingBar.setRangeValues(0,duration);
256
-
257
- maxtimelabel = createTimeLabel(duration);
258
-
259
- stopTrimming.setText(maxtimelabel);
260
-
261
- trimmingBar.setOnRangeSeekBarChangeListener(new RangeSeekBar.OnRangeSeekBarChangeListener(){
262
-
263
- @Override
264
-
265
-        
266
-
267
- public void onRangeSeekBarValuesChanged(RangeSeekBar bar, Object minValue, Object maxValue) {
268
-
269
- //Object型からString型に変換
270
-
271
- String minstr = minValue.toString();
272
-
273
- String maxstr = maxValue.toString();
274
-
275
- //String型からint型に変換
276
-
277
- int minint = Integer.parseInt(minstr);
278
-
279
- int maxint = Integer.parseInt(maxstr);
280
-
281
- //0:00のような表示にする
282
-
283
- String minlabel = createTimeLabel(minint);
284
-
285
- String maxlabel = createTimeLabel(maxint);
286
-
287
- //トリミングする開始時間と終了時間を表示する
288
-
289
- startTrimming.setText(minlabel);
290
-
291
- stopTrimming.setText(maxlabel);
292
-
293
- }
294
-
295
- });
296
-
297
-
298
-
299
-
300
-
301
- final Button trimmingButton = (Button) findViewById(R.id.trimmingButton);
302
-
303
- trimmingButton.setOnClickListener(new View.OnClickListener(){
304
-
305
- @Override
306
-
307
- public void onClick(View v) {
308
-
309
- //トリミング開始時間の取得
310
-
311
- start = trimmingBar.getSelectedMinValue();
312
-
313
- String min = start.toString();
314
-
315
- int trimstart = Integer.parseInt(min);
316
-
317
- String mincurrent = createTimeLabel(trimstart);
318
-
319
- System.out.println(mincurrent);
320
-
321
- //トリミング終了時間の取得
322
-
323
- stop = trimmingBar.getSelectedMaxValue();
324
-
325
- String max = stop.toString();
326
-
327
- int trimstop = Integer.parseInt(max);
328
-
329
- String maxcurrent = createTimeLabel(trimstop);
330
-
331
- System.out.println(maxcurrent);
332
-
333
- **//トリミングの作業をここで行い、ディレクトリに挿入する**
334
-
335
- ** //ここで処理を書き込んで処理をしたいです。**
336
-
337
- }
338
-
339
- });
340
-
341
-
342
-
343
-
344
-
345
- }
346
-
347
-
348
-
349
-
350
-
351
- private Handler handler = new Handler(){
352
-
353
- @Override
354
-
355
- public void handleMessage(Message msg) {
356
-
357
- int currentPosition = msg.what;
358
-
359
- //update position time
360
-
361
- VoiceseekBar.setProgress(currentPosition);
362
-
363
- //update position label
364
-
365
- String Voicetime = createTimeLabel(currentPosition);
366
-
367
- timeLabel.setText(Voicetime);
157
+ // コールバックが呼ばれる間隔を指定
158
+
159
+ audioRecord.setPositionNotificationPeriod(bufSize / 2);
160
+
161
+ }
162
+
163
+
164
+
165
+ /**
166
+
167
+ * オーディオレコード用のボタン初期化
168
+
169
+ */
170
+
171
+ private void initAudioRecordButton(){
172
+
173
+ View.OnClickListener startButtonClickListener = new View.OnClickListener() {
174
+
175
+ @Override
176
+
177
+ public void onClick(View view) {
178
+
179
+ startAudioRecord();
180
+
181
+
182
+
183
+
184
+
185
+ }
186
+
187
+ };
188
+
189
+ findViewById(R.id.startButton).setOnClickListener(startButtonClickListener);
190
+
191
+
192
+
193
+ View.OnClickListener stopButtonClickListener = new View.OnClickListener() {
194
+
195
+ @Override
196
+
197
+ public void onClick(View view) {
198
+
199
+ stopAudioRecord();
200
+
201
+
202
+
203
+ }
204
+
205
+ };
206
+
207
+ findViewById(R.id.stopButton).setOnClickListener(stopButtonClickListener);
208
+
209
+
210
+
211
+ // playButton.setOnClickListener(new View.OnClickListener() {
212
+
213
+ // @Override
214
+
215
+ // public void onClick(View view) {
216
+
217
+ // playRecord();
218
+
219
+ // }
220
+
221
+ // });
222
+
223
+ }
224
+
225
+
226
+
227
+ private void startAudioRecord(){
228
+
229
+ audioRecord.startRecording();
230
+
231
+ audioRecord.read(shortData, 0, bufSize/2);
232
+
233
+ }
234
+
235
+
236
+
237
+ //オーディオレコードを停止する
238
+
239
+ private void stopAudioRecord(){
240
+
241
+ audioRecord.stop();
242
+
243
+ File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/test.wav");
244
+
245
+ if(file.exists()){
246
+
247
+ MediaRecorder mediaRecorder = new MediaRecorder();
248
+
249
+ mediaRecorder.start();
250
+
251
+ System.out.println("あります");
252
+
253
+ System.out.println(file);
254
+
255
+ **//↓ここに処理を書き込みたいです。↓//**
256
+
257
+ //fileの音声から言葉を認識する
258
+
259
+
260
+
261
+ //認識した音声から「ありがとう」がふくまれているのか
262
+
263
+
264
+
265
+ //「ありがとう」が含まれていれば、「ありがとう」を取得し、保存
266
+
267
+
268
+
269
+        ①**//↑ここに処理を書き込みたいです↑//**
270
+
271
+ }else{
272
+
273
+ System.out.println("ありません");
368
274
 
369
275
  }
370
276
 
371
- };
372
-
373
-
374
-
375
- public String createTimeLabel(int time){
376
-
377
- String timeLabel = "";
378
-
379
- int min = time / 1000 / 60;
380
-
381
- int sec = time / 1000 % 60;
382
-
383
-
384
-
385
- timeLabel = min + ":";
386
-
387
- if(sec < 10){
388
-
389
- timeLabel += "0";
390
-
391
- }
277
+ }
392
-
393
- timeLabel += sec;
394
-
395
- return timeLabel;
396
-
397
- }
398
-
399
-
400
278
 
401
279
  }
402
280
 

4

seekbarを二つ用いて使っていましたが、rangeseekbarを用いたことで、一つのseekbarで範囲を指定することができました。

2018/06/04 16:27

投稿

slvg8122
slvg8122

スコア6

test CHANGED
File without changes
test CHANGED
@@ -4,9 +4,11 @@
4
4
 
5
5
  ### 発生している問題点・エラーメッセージ
6
6
 
7
-  今現在では、RangeSeekBarを用いて、トリミングを行いたい開始時間と終了時間の取得(①)はできていますが、その  指定した区間で、ボタンをクリックすることでトリミングを行うにはどのようなメソッドが必要なのかがわからないことと、
7
+  今現在では、RangeSeekBarを用いて、トリミングを行いたい開始時間と終了時間の取得(①)はできていますが、
8
+
8
-
9
+  その指定した区間で、ボタンをクリックすることでトリミングを行うにはどのようなメソッドが必要なのかがわからない
10
+
9
-  そのデータをrawディレクトリ内に入れて保存する作業ができていないのが現状の問題点です。
11
+  ことと、そのデータをrawディレクトリ内に入れて保存する作業ができていないのが現状の問題点です。
10
12
 
11
13
  ### ソースコード
12
14
 

3

以前はseekbarを二つ用いて使っていましたが、rangeseekbarを用いたことで、一つのseekbarで範囲を指定することができました。

2018/05/30 15:30

投稿

slvg8122
slvg8122

スコア6

test CHANGED
File without changes
test CHANGED
@@ -8,12 +8,6 @@
8
8
 
9
9
   そのデータをrawディレクトリ内に入れて保存する作業ができていないのが現状の問題点です。
10
10
 
11
- ### 問題が発生するまでの流れ・手順
12
-
13
-  トリミングを行いたい開始・終了時間の取得ができて、トリミングの作業に進めるために調べていったところ
14
-
15
-
16
-
17
11
  ### ソースコード
18
12
 
19
13
   ※()内はidです。

2

seekbarを二つ用いて使っていましたが、rangeseekbarを用いたことで、一つのseekbarで範囲を指定することができました。

2018/05/30 15:30

投稿

slvg8122
slvg8122

スコア6

test CHANGED
File without changes
test CHANGED
@@ -1,34 +1,36 @@
1
- 前提・実現したいこと
1
+ ### 前提・実現したいこと
2
-
2
+
3
- Android Studio(Java)で、音声ファイル(wav)をトリミングをするアプリを作っています。
3
+  Android Studio(Java)で、音声ファイル(wav)をトリミングをするアプリを作っています。
4
-
4
+
5
- 発生している問題点・エラーメッセージ
5
+ ### 発生している問題点・エラーメッセージ
6
-
6
+
7
- 今現在では、RangeSeekBarを用いて、トリミングを行いたい開始時間と終了時間の取得(①)はできていますが、その指定した区間で、ボタンをクリックすることでトリミングを行うにはどのようなメソッドが必要なのかがわからないことと、そのデータをrawディレクトリ内に入れて保存する作業ができていないのが現状の問題点です。
7
+  今現在では、RangeSeekBarを用いて、トリミングを行いたい開始時間と終了時間の取得(①)はできていますが、その  指定した区間で、ボタンをクリックすることでトリミングを行うにはどのようなメソッドが必要なのかがわからないことと、
8
+
8
-
9
+  そのデータをrawディレクトリ内に入れて保存する作業ができていないのが現状の問題点です。
10
+
9
- 問題が発生するまでの流れ・手順
11
+ ### 問題が発生するまでの流れ・手順
10
-
12
+
11
- トリミングを行いたい開始・終了時間の取得ができて、トリミングの作業に進めるために調べていったところ
13
+  トリミングを行いたい開始・終了時間の取得ができて、トリミングの作業に進めるために調べていったところ
12
14
 
13
15
 
14
16
 
15
- ソースコード
17
+ ### ソースコード
16
-
18
+
17
- ※()内はidです。
19
+  ※()内はidです。
18
-
20
+
19
- ・音声(または音楽)を開始位置を動かすために使用する(途中再生など)「seekbar(VoiceSeekBar)」
21
+  ・音声(または音楽)を開始位置を動かすために使用する(途中再生など)「seekbar(VoiceSeekBar)」
20
-
22
+
21
- ・音声(または音楽)を再生、一時停止をするために使用するボタン「Button(start)」
23
+  ・音声(または音楽)を再生、一時停止をするために使用するボタン「Button(start)」
22
-
24
+
23
- ・音声(または音楽)のトリミングを開始・終了する時間を調節する「RangeSeekBar(trimmingBar)」
25
+  ・音声(または音楽)のトリミングを開始・終了する時間を調節する「RangeSeekBar(trimmingBar)」
24
-
26
+
25
- ・音声(または音楽)の再生時間を表示する「TextView(timeLabel)」
27
+  ・音声(または音楽)の再生時間を表示する「TextView(timeLabel)」
26
-
28
+
27
- ・音声(または音楽)をトリミングするボタン「Button(trimmingButton)」
29
+  ・音声(または音楽)をトリミングするボタン「Button(trimmingButton)」
28
-
30
+
29
- ・音声(または音楽)のトリミングを開始する時間を表示する「TextView(startTrimmingTime)」
31
+  ・音声(または音楽)のトリミングを開始する時間を表示する「TextView(startTrimmingTime)」
30
-
32
+
31
- ・音声(または音楽)のトリミングを終了する時間を表示する「TextView(stopTrimmingTime)」
33
+  ・音声(または音楽)のトリミングを終了する時間を表示する「TextView(stopTrimmingTime)」
32
34
 
33
35
  ```MainActivity.java
34
36
 

1

seekbarを二つ用いて使っていましたが、rangeseekbarを用いたことで、一つのseekbarで範囲を指定することができました。

2018/05/30 15:28

投稿

slvg8122
slvg8122

スコア6

test CHANGED
@@ -1 +1 @@
1
- mp3音声(または音楽)をトリミングする方法がわかりません
1
+ wavファイルのトリミング処理をしたいで
test CHANGED
@@ -1,10 +1,18 @@
1
+ ・前提・実現したいこと
2
+
3
+ Android Studio(Java)で、音声ファイル(wav)をトリミングをするアプリを作っています。
4
+
5
+ ・発生している問題点・エラーメッセージ
6
+
1
- 現在、android studioを用いて、音声(または音楽)のトリミングを行いたいと考えているのですが、音声をトリミングする開始時間と終了時間の取得はできているのですが、その先にトリミングを行うにはどのようにプログラムを組んで作成するの分かりません
7
+ 現在ではRangeSeekBarを用いて、トリミングを行いたい開始時間と終了時間の取得(①)はできていすが、その指定した区間で、ボタンをクリックすることでトリミングを行うにはどのようなメソッドが必要なのかがわからないことと、そのデータをrawディレクトリ内入れて保存する作業ができていないのが現状の問題点です
2
-
3
- また、参考サイトも教えていただければありがたいです。
8
+
4
-
5
- 以上、よろしくお願いいたしす。
9
+ ・問題が発生するでの流れ・手順
10
+
6
-
11
+ トリミングを行いたい開始・終了時間の取得ができて、トリミングの作業に進めるために調べていったところ
12
+
13
+
14
+
7
-
15
+ ・ソースコード
8
16
 
9
17
  ※()内はidです。
10
18
 
@@ -12,12 +20,10 @@
12
20
 
13
21
  ・音声(または音楽)を再生、一時停止をするために使用するボタン「Button(start)」
14
22
 
15
- ・音声(または音楽)のトリミングを開始する時間を調節する「seekbar(startTrimming)」
23
+ ・音声(または音楽)のトリミングを開始・終了する時間を調節する「RangeSeekBar(trimmingBar)」
16
24
 
17
25
  ・音声(または音楽)の再生時間を表示する「TextView(timeLabel)」
18
26
 
19
- ・音声(または音楽)のトリミングを終了する時間を調節する「seekbar(stopTrimming)」
20
-
21
27
  ・音声(または音楽)をトリミングするボタン「Button(trimmingButton)」
22
28
 
23
29
  ・音声(または音楽)のトリミングを開始する時間を表示する「TextView(startTrimmingTime)」
@@ -46,11 +52,15 @@
46
52
 
47
53
 
48
54
 
55
+ import com.yahoo.mobile.client.android.util.rangeseekbar.RangeSeekBar;
56
+
57
+
58
+
49
59
  import java.io.IOException;
50
60
 
51
61
 
52
62
 
53
- public class MainActivity extends AppCompatActivity{
63
+ public class MainActivity extends AppCompatActivity {
54
64
 
55
65
 
56
66
 
@@ -68,9 +78,13 @@
68
78
 
69
79
  TextView stopTrimming;
70
80
 
81
+ String maxtimelabel;
82
+
83
+ RangeSeekBar trimmingBar;
84
+
71
- int start;
85
+ Object start;
72
-
86
+
73
- int stop;
87
+ Object stop;
74
88
 
75
89
 
76
90
 
@@ -82,6 +96,8 @@
82
96
 
83
97
  setContentView(R.layout.activity_main);
84
98
 
99
+
100
+
85
101
  //音声(または音楽)の再生時間を表示するTextView
86
102
 
87
103
  timeLabel = (TextView) findViewById(R.id.timeLabel);
@@ -96,7 +112,7 @@
96
112
 
97
113
  //音声ファイルを取得
98
114
 
99
- mediaPlayer = MediaPlayer.create(this,R.raw.music);
115
+ mediaPlayer = MediaPlayer.create(this,R.raw.sample01);
100
116
 
101
117
  mediaPlayer.seekTo(0);
102
118
 
@@ -234,136 +250,96 @@
234
250
 
235
251
  });
236
252
 
237
- //トリミング作業//
253
+ //トリミングシークバー
238
-
239
- final SeekBar startseekBar = (SeekBar) findViewById(R.id.startTrimming);
254
+
240
-
241
- startseekBar.setMax(duration);
242
-
243
- final SeekBar stopseekBar = (SeekBar) findViewById(R.id.stopTrimming);
244
-
245
- stopseekBar.setMax(duration);
246
-
247
- Button trimmingButton = (Button) findViewById(R.id.trimmingButton);
255
+ trimmingBar = (RangeSeekBar) findViewById(R.id.trimmingSeekBar);
256
+
248
-
257
+ trimmingBar.setRangeValues(0,duration);
258
+
249
-
259
+ maxtimelabel = createTimeLabel(duration);
250
-
260
+
251
- //トリミング開始部分//
261
+ stopTrimming.setText(maxtimelabel);
252
-
262
+
253
- startseekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
263
+ trimmingBar.setOnRangeSeekBarChangeListener(new RangeSeekBar.OnRangeSeekBarChangeListener(){
254
-
264
+
255
- @Override
265
+ @Override
266
+
256
-
267
+        ①
268
+
257
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
269
+ public void onRangeSeekBarValuesChanged(RangeSeekBar bar, Object minValue, Object maxValue) {
270
+
258
-
271
+ //Object型からString型に変換
272
+
273
+ String minstr = minValue.toString();
274
+
275
+ String maxstr = maxValue.toString();
276
+
277
+ //String型からint型に変換
278
+
279
+ int minint = Integer.parseInt(minstr);
280
+
281
+ int maxint = Integer.parseInt(maxstr);
282
+
259
- //stopseekBarりも先に行かいようにする
283
+ //0:00の表示にする
260
-
261
- if(startseekBar.getProgress() >= stopseekBar.getProgress()){
284
+
262
-
263
- startseekBar.setProgress(stopseekBar.getProgress());
264
-
265
- }else{
266
-
267
- String trimmingTime = createTimeLabel(progress);
285
+ String minlabel = createTimeLabel(minint);
286
+
268
-
287
+ String maxlabel = createTimeLabel(maxint);
288
+
289
+ //トリミングする開始時間と終了時間を表示する
290
+
269
- startTrimming.setText(trimmingTime);
291
+ startTrimming.setText(minlabel);
270
-
271
- }
292
+
272
-
273
- }
274
-
275
- @Override
276
-
277
- public void onStartTrackingTouch(SeekBar seekBar) {
278
-
279
-
280
-
281
- }
282
-
283
- @Override
284
-
285
- public void onStopTrackingTouch(SeekBar seekBar) {
293
+ stopTrimming.setText(maxlabel);
286
-
287
-
288
294
 
289
295
  }
290
296
 
291
297
  });
292
298
 
299
+
300
+
301
+
302
+
293
- //トリミング終了部分//
303
+ final Button trimmingButton = (Button) findViewById(R.id.trimmingButton);
294
-
304
+
295
- stopseekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
305
+ trimmingButton.setOnClickListener(new View.OnClickListener(){
296
-
306
+
297
- @Override
307
+ @Override
298
-
308
+
299
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
309
+ public void onClick(View v) {
300
-
301
- //startseekBarのsecondaryProgressをstopseekBarの上限まで入れる//
310
+
302
-
303
- startseekBar.setSecondaryProgress(stopseekBar.getProgress());
304
-
305
- //stopseekBarを動かしているに止まっているstartseekBarをstopseekBar以下値にしておく
311
+ //トリミング開始取得
306
-
307
- if(stopseekBar.getProgress() <= startseekBar.getProgress()){
312
+
308
-
309
- startseekBar.setProgress(stopseekBar.getProgress());
313
+ start = trimmingBar.getSelectedMinValue();
310
-
311
-
312
-
314
+
313
- }
315
+ String min = start.toString();
316
+
314
-
317
+ int trimstart = Integer.parseInt(min);
318
+
315
- String trimmingTime = createTimeLabel(progress);
319
+ String mincurrent = createTimeLabel(trimstart);
320
+
316
-
321
+ System.out.println(mincurrent);
322
+
323
+ //トリミング終了時間の取得
324
+
317
- stopTrimming.setText(trimmingTime);
325
+ stop = trimmingBar.getSelectedMaxValue();
318
-
319
- }
326
+
320
-
321
-
322
-
323
- @Override
324
-
325
- public void onStartTrackingTouch(SeekBar seekBar) {
327
+ String max = stop.toString();
326
-
327
-
328
-
329
- }
328
+
330
-
331
-
332
-
333
- @Override
334
-
335
- public void onStopTrackingTouch(SeekBar seekBar) {
329
+ int trimstop = Integer.parseInt(max);
330
+
336
-
331
+ String maxcurrent = createTimeLabel(trimstop);
332
+
337
-
333
+ System.out.println(maxcurrent);
334
+
335
+ **//トリミングの作業をここで行い、ディレクトリに挿入する**
336
+
337
+ ** //ここで処理を書き込んで処理をしたいです。**
338
338
 
339
339
  }
340
340
 
341
341
  });
342
342
 
343
- //指定範囲をトリミングするボタン
344
-
345
- trimmingButton.setOnClickListener(new View.OnClickListener(){
346
-
347
- @Override
348
-
349
- public void onClick(View v) {
350
-
351
- //トリミングの開始時間を取得
352
-
353
- start = startseekBar.getProgress();
354
-
355
- //トリミングの終了時間を取得
356
-
357
- stop = stopseekBar.getProgress();
358
-
359
-           //**ここでトリミングを行いたいです**
360
-
361
-
362
-
363
- }
364
-
365
- });
366
-
367
343
 
368
344
 
369
345
 
@@ -422,6 +398,10 @@
422
398
 
423
399
  }
424
400
 
401
+
402
+
425
403
  }
426
404
 
405
+
406
+
427
407
  ```