Twitch SDK (Internal)
pcmbufferaudiosource.h
Go to the documentation of this file.
1 /********************************************************************************************
2  * Twitch Broadcasting SDK
3  *
4  * This software is supplied under the terms of a license agreement with Twitch Interactive, Inc. and
5  * may not be copied or used except in accordance with the terms of that agreement
6  * Copyright (c) 2012-2017 Twitch Interactive, Inc.
7  *
8  *********************************************************************************************/
9 
10 #pragma once
11 
13 
14 namespace ttv
15 {
25  template <typename BufferFormat, typename ContextType, size_t SelectedChannelIndex = 0>
27  {
28  public:
30  static constexpr size_t SampleRate = BufferFormat::SampleRate;
31  static constexpr size_t ChannelCount = BufferFormat::ChannelCount;
32 
33  static_assert(SelectedChannelIndex < ChannelCount, "Selected channel index out of bounds.");
34 
35  PCMBufferAudioSource(ContextType& context)
36  : mBuffer(nullptr)
37  {
38  }
39 
40 
41  void Bind(const SampleType* buffer, SampleRange range)
42  {
43  assert(buffer != nullptr);
44  assert(range.sampleCount != 0);
45 
46  mBuffer = buffer;
47  mRange = range;
48  }
49 
50 
51  void Unbind()
52  {
53  mBuffer = nullptr;
54  mRange = {};
55  }
56 
57 
59  {
60  return mRange;
61  }
62 
63 
64  SampleType operator[](size_t index) const
65  {
66  assert(index >= GetSampleRange().startIndex);
67  assert(index < GetSampleRange().startIndex + GetSampleRange().sampleCount);
68 
69  size_t bufferIndex = ((index - mRange.startIndex) * ChannelCount) + SelectedChannelIndex;
70 
71  return mBuffer[bufferIndex];
72  }
73 
74  private:
77  };
78 }
void Bind(const SampleType *buffer, SampleRange range)
Definition: pcmbufferaudiosource.h:41
SampleRange GetSampleRange() const
Definition: pcmbufferaudiosource.h:58
Definition: pcmbufferaudiosource.h:26
size_t sampleCount
Definition: dsputilities.h:80
SampleType operator[](size_t index) const
Definition: pcmbufferaudiosource.h:64
void Unbind()
Definition: pcmbufferaudiosource.h:51
static constexpr size_t SampleRate
Definition: pcmbufferaudiosource.h:30
SampleTypeArg SampleType
Definition: dsputilities.h:132
JSON (JavaScript Object Notation).
Definition: adsapi.h:16
#define assert(expr)
Definition: assertion.h:47
const SampleType * mBuffer
Definition: pcmbufferaudiosource.h:75
Definition: dsputilities.h:60
size_t startIndex
Definition: dsputilities.h:75
static constexpr size_t ChannelCount
Definition: pcmbufferaudiosource.h:31
typename BufferFormat::SampleType SampleType
Definition: pcmbufferaudiosource.h:29
PCMBufferAudioSource(ContextType &context)
Definition: pcmbufferaudiosource.h:35
static constexpr size_t SampleRate
Definition: dsputilities.h:133
SampleRange mRange
Definition: pcmbufferaudiosource.h:76
static constexpr size_t ChannelCount
Definition: dsputilities.h:134