@Override public void encode(DataOutput out, TrackStartRequestMessage message) throws IOException { int version = version(message); out.writeLong(message.executorId); out.writeUTF(message.trackInfo.title); out.writeUTF(message.trackInfo.author); out.writeLong(message.trackInfo.length); out.writeUTF(message.trackInfo.identifier); out.writeBoolean(message.trackInfo.isStream); out.writeInt(message.encodedTrack.length); out.write(message.encodedTrack); out.writeInt(message.volume); out.writeUTF(message.configuration.getResamplingQuality().name()); out.writeInt(message.configuration.getOpusEncodingQuality()); if (version >= VERSION_WITH_FORMAT) { AudioDataFormat format = message.configuration.getOutputFormat(); out.writeInt(format.channelCount); out.writeInt(format.sampleRate); out.writeInt(format.chunkSampleCount); out.writeUTF(format.codecName()); } if (version >= VERSION_WITH_POSITION) { out.writeLong(message.position); } }
/** * @param configuration Configuration to use * @param channels Number of channels in input data * @param downstream Next filter in chain * @param sourceRate Source sample rate * @param targetRate Target sample rate */ public ResamplingPcmAudioFilter(AudioConfiguration configuration, int channels, FloatPcmAudioFilter downstream, int sourceRate, int targetRate) { this.downstream = downstream; converters = new SampleRateConverter[channels]; outputSegments = new float[channels][]; SampleRateConverter.ResamplingType type = getResamplingType(configuration.getResamplingQuality()); for (int i = 0; i < channels; i++) { outputSegments[i] = new float[BUFFER_SIZE]; converters[i] = new SampleRateConverter(type, 1, sourceRate, targetRate); } }