2013-02-18 3 views
3

바이트 배열을 서버에서 수신 했으므로 연결되어 완벽하게 전송된다는 것을 알고 있습니다. 바이트 배열에서 사운드를 재생하려고 할 때입니다.바이트 배열에서 사운드 재생

다음은 사운드를 재생해야하는 이유입니다.

SourceDataLine speaker = null; 
try { 
    DataLine.Info speakerInfo = new DataLine.Info(SourceDataLine.class, getAudioFormat(samplerate)); 
    speaker = (SourceDataLine) AudioSystem.getLine(speakerInfo); 
} catch (LineUnavailableException e) { 
    e.printStackTrace(); 
} 
int nBytesRead = 0; 
    while (nBytesRead != -1) { 
    if (nBytesRead >= 0) { 
     speaker.write(bytes, 0, nBytesRead); 
    } 
} 

getAudioFormat :

private AudioFormat getAudioFormat(float sample) { 
    int sampleSizeBits = 16; 
    int channels = 1; 
    boolean signed = true; 
    boolean bigEndian = false; 
    return new AudioFormat(sample, sampleSizeBits, channels, signed, bigEndian); 
} 

가 어떻게이 byte[]에서 음악을 재생할 수 있습니다?

가 얼마 전에 내가 HTTP를 통해 음악을 스트리밍 할 수있는 작은 서버 쓴
+0

'Byte []'또는'byte []'를 의미합니까? –

+0

그들은 비교적 동일합니다 ...하지만 나는 [byte]를 의미합니다. – KeirDavis

+0

아니요, 이들은 동일하지 않습니다. 'Byte []'는'java.lang.Byte' 타입의 참조 배열이고'byte []'는 원시 8 비트 부호있는 정수 값의 배열입니다. –

답변

2

당신이 당신의 while 루프에서 사운드 바이트 배열에서 읽고 어디 보이지 않는 등 데이터 유형에 따라 브라우저로 스트리밍 할 것입니다. 당신은 '바이트'라는 버퍼가 판독 명령에서 데이터를받을 수 있도록 읽기 방법 사용자가 설정 한 가정 ...

while (nBytesRead = soundDataArray.read(bytes) != 1) 

: 그들은이 방법 당신은 아마이 라인을 따라 뭔가가 있어야, 설정됩니다. 그런 다음 write() 메소드는 'bytes'를 반복적으로 채워 보내 게됩니다.

물론 'bytes'는 소스 루프가있는 바이트 배열이 아니라 while 루프에서만 사용되는 버퍼입니다.

때로는 읽기 방법에 다음과 같이 두 입력이 있습니다. .read(bufferArray, bytesToRead); 여기서 k 또는 여러 k의 값은 공통입니다. (bufferArray.length == bytesToRead)

+0

'soundDataArray'의 클래스는 무엇입니까? 게다가, 'AudioInputStream'인 경우, 첫 번째 줄에 명시된 바와 같이 서버에서 바이트를 받았기 때문에 보낼 수 없습니다. – KeirDavis

+0

흠. 어쩌면 내 대답이 그렇게 분명하지 않을 수도 있습니다. 요점은 점진적으로 입력 배열의 덩어리를 잡고 write() 메서드에 제공해야한다는 것입니다. 그렇습니까? 그래서 아마도 바이트를 읽는 메소드를 작성한다. 보통 커서 나 인덱스를 사용하여 read() 메소드를 호출하는 과정을 추적한다. 어쩌면 전체가 바이트에 대한 래퍼 일 것입니다. 이렇게하면 인덱스가 read() 메서드 외부의 인스턴스 변수가 될 수 있습니다. 이 시나리오에서 SoundDataArray는 새 Object 정의 (받은 바이트 파일을 래핑)입니다. –

+0

오른쪽 ... 그래서 soundDataArray는 캐스트 객체입니까? 그래서 (Object) bytes.read (bytes, 0, bytes.length); – KeirDavis

0

: Stream music in loop over http using java

저기 이동, 그리고 그것을 재생하는 방법을, 당신은 단지 특정 링크로 이동, 즉 : www.localhost : 8080/테스트 내 경우에는 브라우저가 음악을 스트리밍합니다.

어쩌면 당신은 내 결과 중 일부를 당신의 것과 결합하는 해결책을 찾을 수 있습니다.

사실,이 ByteArray를 반환 어떤 링크,