private static long getRiffMarkerTimeMs(RcRiffMarkerEntry e, int channels, int sampleRate) { BigDecimal sampleOffset = new BigDecimal(e.getSampleOffset()); return Math.round( sampleOffset .divide(new BigDecimal(channels), MathContext.DECIMAL128) .divide(new BigDecimal(sampleRate / 1000D), MathContext.DECIMAL128) .doubleValue()); } }
RcRiffMarkerEntry rcRiffMarkerEntry = new RcRiffMarkerEntry(); rcRiffMarkerEntry.setFlag(0, true); rcRiffMarkerEntry.setFlag(1, true); rcRiffMarkerEntry.setFlag(2, true); rcRiffMarkerEntry.setFlag(3, false); rcRiffMarkerEntry.setFlag(4, true); int channels = rcRiffBwf.getRcRiffFmtChunk().getChannels(); long sampleOffset = Math.round(markerPosMs * (sampleRate / 1000D) * channels); rcRiffMarkerEntry.setSampleOffset(BigInteger.valueOf(sampleOffset)); rcRiffMarkerEntry.setByteOffset(BigInteger.valueOf(byteOffset)); rcRiffMarkerEntry.setIntraSampleOffset(BigInteger.valueOf(0L)); rcRiffMarkerEntry.setLabelText(labelText); rcRiffMarkerEntry.setLabelChunkIdentifier(0L); rcRiffMarkerEntry.setVendorAndProduct(vendorAndProduct); rcRiffMarkerEntry.setUserData1(0L); rcRiffMarkerEntry.setUserData2(0L);
@Override public long read(RandomAccessFile in, long ptr, long chunkSize) throws IOException { this.setPtr(ptr); this.setChunkSize(chunkSize); this.rcRiffMarkerEntryList.clear(); if (chunkSize % 320 != 0) { throw new IOException("Marker chunk size must be a multiple of the size of MarkerEntry (320 bytes)."); } long bytesRead = 0; while (bytesRead < chunkSize) { RcRiffMarkerEntry e = new RcRiffMarkerEntry(); bytesRead += e.read(in); this.rcRiffMarkerEntryList.add(e); } return bytesRead; }
if (e.isFlagSet(0)) { if (e.isFlagSet(1)) { if (e.isFlagSet(2)) { if (e.isFlagSet(3)) { if (e.isFlagSet(4)) { System.out.println("\t\tsampleOffset: " + e.getSampleOffset()); System.out.println("\t\tbyteOffset: " + e.getByteOffset()); System.out.println("\t\tintraSmplOffset: " + e.getIntraSampleOffset()); System.out.println("\t\tlabelText: " + e.getLabelText()); System.out.println("\t\tlabelChunkIdentifier: " + e.getLabelChunkIdentifier()); System.out.println("\t\tuserData1: " + e.getUserData1()); System.out.println("\t\tuserData2: " + e.getUserData2()); System.out.println("\t\tuserData3: " + e.getUserData3()); System.out.println("\t\tuserData4: " + e.getUserData4());
public static void listMarkers(File waveFile) throws IOException { RcRiffBwf rcRiffBwf = new RcRiffBwf(waveFile); rcRiffBwf.open(); RcRiffMarkerChunk rcRiffMarkerChunk = rcRiffBwf.getRcRiffMarkerChunk(); int sampleRate = (int) rcRiffBwf.getRcRiffFmtChunk().getSamplesPerSec(); int channels = rcRiffBwf.getRcRiffFmtChunk().getChannels(); long ms; if (rcRiffMarkerChunk != null) { for (RcRiffMarkerEntry e : rcRiffMarkerChunk.getMarkerEntries()) { ms = Math.round((double) e.getSampleOffset().longValue() / (sampleRate / 1000D) / (double) channels); System.out.println(e.getLabelText() + " @ " + formatTime(ms)); } System.out.println("\n" + rcRiffMarkerChunk.getMarkerEntries().size() + " marker entries"); } else { System.out.println("No marker chunk was found."); } rcRiffBwf.close(); }
markerChunkTokens = rcRiffMarkerEntry.getLabelText().split(" "); rcTransWordMd.setStartTime(Math.round(rcRiffMarkerEntry.getByteOffset().longValue() / blockAlign / (sampleRate / 1000D)));
charCnt += marker.getLabelText().length() + 1; text.append(e.getLabelText()); text.append(" ");
rcRiffMarkerEntry.getLabelText().trim().toLowerCase(), stripUnderscores));