nk 1.0.0
C++ Numerical Computing Runtime
Loading...
Searching...
No Matches
audio_io.hpp
Go to the documentation of this file.
1
3// toolboxes/audio/include/nk/audio/io/audio_io.hpp
4//
5// Unified Audio I/O facade for NK: audioread, audiowrite, audioinfo.
6// Zero-dependency pure C++17 implementation supporting WAV, FLAC, MP3, AIFF, AU, MIDI.
7
8#pragma once
9
10#include <cstdint>
11#include <memory_resource>
12#include <nk/value/value.hpp>
13#include <string>
14#include <vector>
15
16namespace nk::audio {
17
20
21
23struct AudioData {
25 double sampleRate = 0.0;
26 uint16_t bitsPerSample = 16;
27 uint16_t numChannels = 1;
28 uint64_t totalSamples = 0;
29 std::string title;
30 std::string artist;
31 std::string comment;
32};
33
35struct AudioInfo {
36 std::string format;
37 std::string compressionMethod;
38 uint32_t numChannels = 0;
39 double sampleRate = 0.0;
40 uint64_t totalSamples = 0;
41 double duration = 0.0;
42 uint16_t bitsPerSample = 0;
43 uint32_t bitRate = 0;
44 std::string title;
45 std::string artist;
46 std::string comment;
47};
48
49// ── In-Memory Byte-Oriented Public APIs (WASM / VFS Friendly) ────────────────
50
59AudioData audioreadFromBytes(const std::uint8_t *data, std::size_t len,
60 int64_t startSample = 1, int64_t endSample = -1,
61 bool nativeType = false,
62 std::pmr::memory_resource *mr = nullptr);
63
71AudioData audioreadFromBytes(const std::string &bytes,
72 int64_t startSample = 1, int64_t endSample = -1,
73 bool nativeType = false,
74 std::pmr::memory_resource *mr = nullptr);
75
80AudioInfo audioinfoFromBytes(const std::uint8_t *data, std::size_t len);
81
85AudioInfo audioinfoFromBytes(const std::string &bytes);
86
96std::vector<std::uint8_t> audiowriteToBytes(const Value &y, double sampleRate,
97 const std::string &format = "wav",
98 uint16_t bitsPerSample = 16,
99 const std::string &title = "",
100 const std::string &artist = "",
101 const std::string &comment = "");
102
103// ── File-System Public APIs (Native / OS wrappers) ──────────────────────────
104
113AudioData audioread(const std::string &path,
114 int64_t startSample = 1, int64_t endSample = -1,
115 bool nativeType = false,
116 std::pmr::memory_resource *mr = nullptr);
117
122AudioInfo audioinfo(const std::string &path);
123
133void audiowrite(const std::string &path, const Value &y, double sampleRate,
134 uint16_t bitsPerSample = 16,
135 const std::string &title = "",
136 const std::string &artist = "",
137 const std::string &comment = "");
138
139
141} // namespace nk::audio
Core MATLAB-compatible multidimensional array and scalar value type.
Definition value.hpp:61
AudioData audioread(const std::string &path, int64_t startSample=1, int64_t endSample=-1, bool nativeType=false, std::pmr::memory_resource *mr=nullptr)
Reads audio file from filesystem ([y, Fs] = audioread(filename)).
AudioInfo audioinfoFromBytes(const std::uint8_t *data, std::size_t len)
Reads audio metadata from memory buffer without decoding audio samples (info = audioinfo(bytes)).
AudioData audioreadFromBytes(const std::uint8_t *data, std::size_t len, int64_t startSample=1, int64_t endSample=-1, bool nativeType=false, std::pmr::memory_resource *mr=nullptr)
Decodes audio from raw memory buffer, sniffing format automatically ([y, Fs] = audioread(bytes)).
void audiowrite(const std::string &path, const Value &y, double sampleRate, uint16_t bitsPerSample=16, const std::string &title="", const std::string &artist="", const std::string &comment="")
Writes audio data matrix y to file on disk (audiowrite(filename, y, Fs)).
AudioInfo audioinfo(const std::string &path)
Returns audio file metadata (info = audioinfo(filename)).
std::vector< std::uint8_t > audiowriteToBytes(const Value &y, double sampleRate, const std::string &format="wav", uint16_t bitsPerSample=16, const std::string &title="", const std::string &artist="", const std::string &comment="")
Encodes audio matrix y into memory byte buffer (bytes = audiowrite(y, Fs, ...)).
Decoded audio waveform data and basic metadata.
Definition audio_io.hpp:23
uint64_t totalSamples
Total number of sample frames per channel.
Definition audio_io.hpp:28
Value y
Audio data matrix N x C (samples along rows, channels along columns).
Definition audio_io.hpp:24
double sampleRate
Sampling frequency Fs in Hz.
Definition audio_io.hpp:25
std::string comment
Embedded comment or description metadata.
Definition audio_io.hpp:31
std::string artist
Embedded artist metadata.
Definition audio_io.hpp:30
uint16_t bitsPerSample
Quantization bit depth per sample.
Definition audio_io.hpp:26
std::string title
Embedded track title metadata.
Definition audio_io.hpp:29
uint16_t numChannels
Number of interleaved audio channels.
Definition audio_io.hpp:27
Audio file metadata container (info = audioinfo(filename)).
Definition audio_io.hpp:35
uint32_t bitRate
Bitrate in kbps.
Definition audio_io.hpp:43
std::string title
Track title.
Definition audio_io.hpp:44
uint16_t bitsPerSample
Bits per sample.
Definition audio_io.hpp:42
std::string compressionMethod
Audio compression codec name.
Definition audio_io.hpp:37
std::string artist
Track artist.
Definition audio_io.hpp:45
uint64_t totalSamples
Total sample frames in file.
Definition audio_io.hpp:40
double sampleRate
Sampling rate in Hz.
Definition audio_io.hpp:39
uint32_t numChannels
Number of audio channels.
Definition audio_io.hpp:38
std::string comment
Comment or genre.
Definition audio_io.hpp:46
std::string format
Container format (e.g. "WAV", "FLAC", "MP3", "AIFF").
Definition audio_io.hpp:36
double duration
Total duration in seconds.
Definition audio_io.hpp:41