자바, jaudiotagger 를 이용 하여 무 작위 로 MP3 를 작은 세그먼트 로 나 눕 니 다.

2862 단어 Java
먼저 다운로드http://www.jthink.net/jaudiotagger/필요 한 jar 패키지 및 인용 추가
제 가 사용 하 는 2.2.3 버 전 은 링크 를 다운로드 합 니 다.
import org.jaudiotagger.audio.mp3.MP3AudioHeader;
import org.jaudiotagger.audio.mp3.MP3File;

다음은 제 예시 코드 입 니 다. 
            // mp3  
            File mSourceMp3File = new File("E:\\Temp\\9274.mp3");
            MP3File mp3 = new MP3File(mSourceMp3File);
            MP3AudioHeader header = (MP3AudioHeader) mp3.getAudioHeader();
            long bitRateKbps = header.getBitRateAsNumber();
            int length = header.getTrackLength() * 1000 / 2;
            System.out.println("   :" + length);
            //         
            long beginTime = 0;
            //      
            long endTime = 0;
            long orderNum = 0;
            while (endTime < length) {
                System.out.println("     " + (orderNum++) + " 。     :" + beginTime);
                Random random = new Random();
                endTime = (random.nextInt(29) % (10) + 20) * 1000;
                if (endTime + beginTime > length) {
                    endTime = length;
                } else {
                    endTime += beginTime;
                }
                System.out.println("       -->" + endTime);
                // 1KByte/s=8Kbps, bitRate *1024L / 8L / 1000L     bps    
                //          
                long beginBitRateBpm = (bitRateKbps * 1024L / 8L / 1000L) * beginTime;
                //             
                long firstFrameByte = header.getMp3StartByte();
                //                
                long beginByte = firstFrameByte + beginBitRateBpm;
                //          
                long endByte = beginByte + (bitRateKbps * 1024L / 8L / 1000L) * (endTime - beginTime);
                //    
                String pathname = "e:\\Temp\\" + orderNum + ".mp3";
                File dFile = new File(pathname);
                RandomAccessFile dRaf = new RandomAccessFile(dFile, "rw");
                RandomAccessFile sRaf = new RandomAccessFile(mSourceMp3File, "rw");
                //  mp3        
                for (long i = 0; i < firstFrameByte; i++) {
                    int m = sRaf.read();
                    dRaf.write(m);
                }
                //        
                sRaf.seek(beginByte);
                //     mp3  
                for (long i = 0; i <= endByte - beginByte; i++) {
                    int m = sRaf.read();
                    dRaf.write(m);
                }
                sRaf.close();
                dRaf.close();
                //             100  
                beginTime = endTime - 100;
            }

본문 은 참고 하 였 다https://blog.51cto.com/lmdtx/2054251중의 자원 은 스스로 약간의 변경 을 했다.
 

좋은 웹페이지 즐겨찾기