2009-08-12 17 views
20

मैं जावा में Braid बना रहा हूं। यदि आप समय को रिवाइंड करते हैं, तो ध्वनि पिछड़ा खेलती है। पीछे एक डब्ल्यूएवी फ़ाइल कैसे खेलें? शायद previous() जैसे कुछ के साथ स्ट्रीम के साथ? ब्राइड की साइट पर आप देख सकते हैं कि मेरा क्या मतलब है।पिछली WAV फ़ाइल चलाएं

अद्यतन: हल हो गया! मेरी अपनी पोस्ट देखें।

+3

+1 क्योंकि मैं ब्रैड प्यार :-) आपके खोए गए प्रतिनिधि बिंदुओं के लिए – ChssPly76

+2

+1 :-) –

+0

धन्यवाद। यह बक्षीस गलती –

उत्तर

13

YEEEEEEESSSSS !!!!!!!!

मैं अपने आप को द्वारा इसे हल (14 वर्ष !!)
मैं इस वर्ग में लिखा है:

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); 
    } 
} 

और फिर:

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 महान :) – ant

+0

@Martijn क्या आप कृपया बता सकते हैं कि इस पंक्ति में औलीन क्या है ... "auline.write (frameStream.getFrame (frame), 0, frameStream.frameSize()); " – Waqas

+1

यह ध्वनि कार्ड के लिए ऑडियोचैनल है। यह एक 'SourceDataLine' उदाहरण है। इस उदाहरण पर एक नज़र डालें: http://www.anyexample.com/programming/java/java_play_wav_sound_file.xml –

2

यदि डब्ल्यूएवी में पीसीएम है, तो पीसीएम नमूने के क्रम को उलट दें। यदि इसमें कुछ अन्य प्रारूप शामिल हैं तो यह बहुत अधिक जटिल हो सकता है; शायद इसे पीसीएम में परिवर्तित करने के लिए शायद सबसे आसान है।

डब्ल्यूएवी प्रारूप पर अधिक जानकारी के लिए, this site देखें।

+0

आपके तेज़ उत्तर के लिए धन्यवाद। लेकिन मुझे नहीं पता कि पीसीएम के साथ ऐसा कैसे करें। शायद आप एक उदाहरण या साइट लिख सकते हैं जहां मुझे कुछ जानकारी मिल सकती है? –

+1

मैंने डब्ल्यूएवी प्रारूप के विवरण के लिए एक लिंक जोड़ा; यदि आपको समस्याएं हो रही हैं, तो उन हिस्सों के बारे में विशिष्ट प्रश्न पूछें जिन्हें आपको समझ में आ रही है। – bdonlan

+0

धन्यवाद मैं कुछ कोशिश करूंगा। और एक बहुत अच्छी साइट। –

2

विंडोज साउंड रिकॉर्डर का उपयोग करें (स्टार्ट -> प्रोग्राम्स -> सहायक उपकरण -> मनोरंजन) में।

इसमें एक .WAV फ़ाइल को रिवर्स करने के लिए एक सुविधा (प्रभाव (मेनू) -> रिवर्स) है। आप उल्टा फ़ाइल को एक अलग नाम से सहेज सकते हैं, और उसके बाद अपने प्रोग्राम में उपयुक्त एक खोल सकते हैं।

+0

वे सभी को रिवर्स करने के लिए कई ध्वनिफाइल (+50) हैं। मैंने सोचा कि पहले से ही इसे चालू किया गया है, लेकिन ... –

संबंधित मुद्दे