2009-08-12 38 views
20

Tôi đang tạo Braid bằng Java. Nếu bạn tua lại thời gian, âm thanh sẽ phát lại. Làm cách nào để phát tệp WAV? Có thể với một luồng có thứ gì đó như previous()? Trên trang web của Braid bạn có thể thấy những gì tôi có ý nghĩa.Phát tệp WAV lùi

Cập nhật: Giải quyết! Xem bài đăng của riêng tôi.

+3

+1 vì tôi yêu Braid :-) – ChssPly76

+2

+1 cho điểm đại diện bị mất của bạn :-) –

+0

cảm ơn bạn. tiền thưởng này là một sai lầm –

Trả lời

13

YEEEEEEESSSSS !!!!!!!!

tôi giải quyết nó bằng bản thân mình (14 tuổi !!)
Tôi đã viết lớp này:

import java.io.IOException; 
import javax.sound.sampled.AudioInputStream; 

/** 
* 
* @author Martijn 
*/ 
public class FrameBuffer { 

    private byte[][] frames; 
    private int frameSize; 

    public FrameBuffer(AudioInputStream stream) throws IOException { 
     readFrames(stream); 
    } 

    public byte[] getFrame(int i) { 
     return frames[i]; 
    } 

    public int numberFrames() 
    { 
     return frames.length; 
    } 

    public int frameSize() 
    { 
     return frameSize; 
    } 

    private void readFrames(AudioInputStream stream) throws IOException { 
     frameSize = stream.getFormat().getFrameSize(); 
     frames = new byte[stream.available()/frameSize][frameSize]; 
     int i = 0; 
     for (; i < frames.length; i++) 
     { 
      byte[] frame = new byte[frameSize]; 
      int numBytes = stream.read(frame, 0, frameSize); 
      if (numBytes == -1) 
      { 
       break; 
      } 
      frames[i] = frame; 
     } 
     System.out.println("FrameSize = " + frameSize); 
     System.out.println("Number frames = " + frames.length); 
     System.out.println("Number frames read = " + i); 
    } 
} 

Và sau đó:

FrameBuffer frameStream = new FrameBuffer(austream); //austream is the audiostream 
int frame = frameStream.numberFrames() - 1; 
while (frame >= 0) { 
     auline.write(frameStream.getFrame(frame), 0, frameStream.frameSize()); 
     frame--; 
} 
+0

@Martijn Courteaux tuyệt vời :) – ant

+0

@ Martart Bạn có thể vui lòng cho biết auline trong dòng này là gì không ... "auline.write (frameStream.getFrame (frame), 0, frameStream.frameSize()); " – Waqas

+1

Đây là kênh âm thanh cho card âm thanh. Nó là một cá thể 'SourceDataLine'. Hãy xem ví dụ này: http://www.anyexample.com/programming/java/java_play_wav_sound_file.xml –

2

Nếu WAV chứa PCM, đảo ngược thứ tự của mẫu PCM. Nếu nó chứa một số định dạng khác, nó có thể phức tạp hơn nhiều; có lẽ dễ nhất để chuyển nó sang PCM trước.

Để biết thêm thông tin về định dạng WAV, hãy xem this site.

+0

Cảm ơn bạn đã trả lời nhanh chóng. Nhưng tôi không biết làm thế nào để làm điều đó với PCM. Có lẽ bạn có thể viết một ví dụ hoặc một trang web nơi tôi có thể tìm thấy một số thông tin? –

+1

Tôi đã thêm liên kết vào mô tả định dạng WAV; nếu bạn gặp sự cố, hãy đặt câu hỏi cụ thể về các phần bạn đang gặp khó khăn trong việc hiểu. – bdonlan

+0

Cảm ơn tôi sẽ thử một cái gì đó. Và một trang web rất tuyệt vời. –

2

Sử dụng Windows Sound Recorder (trong Start -> Programs -> Accessories -> Entertainment).

Ứng dụng có tính năng (Hiệu ứng (menu) -> Đảo ngược) để đảo ngược tệp .WAV. Bạn có thể lưu tệp đã đảo ngược bằng một tên khác, sau đó mở tệp thích hợp trong chương trình của bạn.

+0

chúng có nhiều âm thanh (+50) để đảo ngược tất cả. Tôi nghĩ allready ont nó, nhưng ... –

Các vấn đề liên quan