LMMS
Loading...
Searching...
No Matches
juce_AudioFormatWriter.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26namespace juce
27{
28
29//==============================================================================
44{
45protected:
46 //==============================================================================
61 const String& formatName,
62 double sampleRate,
63 unsigned int numberOfChannels,
64 unsigned int bitsPerSample);
65
66 //==============================================================================
81 const String& formatName,
82 double sampleRate,
83 const AudioChannelSet& audioChannelLayout,
84 unsigned int bitsPerSample);
85
86public:
88 virtual ~AudioFormatWriter();
89
90 //==============================================================================
96
97 //==============================================================================
116 virtual bool write (const int** samplesToWrite, int numSamples) = 0;
117
127 virtual bool flush();
128
129 //==============================================================================
141 int64 startSample,
142 int64 numSamplesToRead);
143
153 bool writeFromAudioSource (AudioSource& source,
154 int numSamplesToRead,
155 int samplesPerBlock = 2048);
156
157
160 int startSample, int numSamples);
161
163 bool writeFromFloatArrays (const float* const* channels, int numChannels, int numSamples);
164
165 //==============================================================================
168
170 int getNumChannels() const noexcept { return (int) numChannels; }
171
174
177
178 //==============================================================================
184 {
185 public:
194 TimeSliceThread& backgroundThread,
195 int numSamplesToBuffer);
196
199
212 bool write (const float* const* data, int numSamples);
213
216 {
217 public:
219 virtual ~IncomingDataReceiver() = default;
220
221 virtual void reset (int numChannels, double sampleRate, int64 totalSamplesInSource) = 0;
222 virtual void addBlock (int64 sampleNumberInSource, const AudioBuffer<float>& newData,
223 int startOffsetInBuffer, int numSamples) = 0;
224 };
225
234
238 void setFlushInterval (int numSamplesPerFlush) noexcept;
239
240 private:
241 class Buffer;
242 std::unique_ptr<Buffer> buffer;
243 };
244
245protected:
246 //==============================================================================
249
251 unsigned int numChannels;
252
254 unsigned int bitsPerSample;
255
258
261
264
266 template <class DestSampleType, class SourceSampleType, class DestEndianness>
268 {
269 using DestType = AudioData::Pointer <DestSampleType, DestEndianness, AudioData::Interleaved, AudioData::NonConst>;
270 using SourceType = AudioData::Pointer <SourceSampleType, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::Const>;
271
272 static void write (void* destData, int numDestChannels, const int* const* source,
273 int numSamples, const int sourceOffset = 0) noexcept
274 {
275 for (int i = 0; i < numDestChannels; ++i)
276 {
277 const DestType dest (addBytesToPointer (destData, i * DestType::getBytesPerSample()), numDestChannels);
278
279 if (*source != nullptr)
280 {
281 dest.convertSamples (SourceType (*source + sourceOffset), numSamples);
282 ++source;
283 }
284 else
285 {
286 dest.clearSamples (numSamples);
287 }
288 }
289 }
290 };
291
292private:
294 friend class ThreadedWriter;
295
297};
298
299} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
Definition juce_AudioSampleBuffer.h:34
Definition juce_AudioChannelSet.h:47
void clearSamples(int numSamples) const noexcept
Definition juce_AudioDataConverters.h:486
void convertSamples(Pointer source, int numSamples) const noexcept
Definition juce_AudioDataConverters.h:442
Definition juce_AudioFormatReader.h:44
Definition juce_AudioFormatWriter.cpp:215
virtual void reset(int numChannels, double sampleRate, int64 totalSamplesInSource)=0
virtual void addBlock(int64 sampleNumberInSource, const AudioBuffer< float > &newData, int startOffsetInBuffer, int numSamples)=0
Definition juce_AudioFormatWriter.h:184
std::unique_ptr< Buffer > buffer
Definition juce_AudioFormatWriter.h:242
bool write(const float *const *data, int numSamples)
Definition juce_AudioFormatWriter.cpp:347
void setDataReceiver(IncomingDataReceiver *)
Definition juce_AudioFormatWriter.cpp:352
ThreadedWriter(AudioFormatWriter *writer, TimeSliceThread &backgroundThread, int numSamplesToBuffer)
Definition juce_AudioFormatWriter.cpp:338
void setFlushInterval(int numSamplesPerFlush) noexcept
Definition juce_AudioFormatWriter.cpp:357
bool writeFromAudioReader(AudioFormatReader &reader, int64 startSample, int64 numSamplesToRead)
Definition juce_AudioFormatWriter.cpp:81
unsigned int numChannels
Definition juce_AudioFormatWriter.h:251
String formatName
Definition juce_AudioFormatWriter.h:293
bool writeFromFloatArrays(const float *const *channels, int numChannels, int numSamples)
Definition juce_AudioFormatWriter.cpp:152
bool writeFromAudioSource(AudioSource &source, int numSamplesToRead, int samplesPerBlock=2048)
Definition juce_AudioFormatWriter.cpp:130
double sampleRate
Definition juce_AudioFormatWriter.h:248
bool usesFloatingPointData
Definition juce_AudioFormatWriter.h:257
const String & getFormatName() const noexcept
Definition juce_AudioFormatWriter.h:95
unsigned int bitsPerSample
Definition juce_AudioFormatWriter.h:254
virtual bool write(const int **samplesToWrite, int numSamples)=0
int getNumChannels() const noexcept
Definition juce_AudioFormatWriter.h:170
AudioFormatWriter(OutputStream *destStream, const String &formatName, double sampleRate, unsigned int numberOfChannels, unsigned int bitsPerSample)
Definition juce_AudioFormatWriter.cpp:29
bool writeFromAudioSampleBuffer(const AudioBuffer< float > &source, int startSample, int numSamples)
Definition juce_AudioFormatWriter.cpp:189
double getSampleRate() const noexcept
Definition juce_AudioFormatWriter.h:167
bool isFloatingPoint() const noexcept
Definition juce_AudioFormatWriter.h:176
AudioChannelSet channelLayout
Definition juce_AudioFormatWriter.h:260
int getBitsPerSample() const noexcept
Definition juce_AudioFormatWriter.h:173
OutputStream * output
Definition juce_AudioFormatWriter.h:263
Definition juce_AudioSource.h:110
Definition juce_OutputStream.h:38
Definition juce_String.h:53
Definition juce_TimeSliceThread.h:83
register unsigned i
Definition inflate.c:1575
JSAMPIMAGE data
Definition jpeglib.h:945
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
#define JUCE_API
Definition juce_StandardHeader.h:152
Definition carla_juce.cpp:31
long long int64
Definition juce_MathsFunctions.h:54
Type * addBytesToPointer(Type *basePointer, IntegerType bytes) noexcept
Definition juce_Memory.h:111
Definition juce_AudioFormatWriter.h:268
static void write(void *destData, int numDestChannels, const int *const *source, int numSamples, const int sourceOffset=0) noexcept
Definition juce_AudioFormatWriter.h:272
AudioData::Pointer< DestSampleType, DestEndianness, AudioData::Interleaved, AudioData::NonConst > DestType
Definition juce_AudioFormatWriter.h:269
AudioData::Pointer< SourceSampleType, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::Const > SourceType
Definition juce_AudioFormatWriter.h:270
int flush(__G__ rawbuf, size, unshrink) __GDEF uch *rawbuf
#define const
Definition zconf.h:137