summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/sound/mas3507d.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/sound/mas3507d.h')
-rw-r--r--src/devices/sound/mas3507d.h29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/devices/sound/mas3507d.h b/src/devices/sound/mas3507d.h
index a1c852f0eeb..d937e9c6414 100644
--- a/src/devices/sound/mas3507d.h
+++ b/src/devices/sound/mas3507d.h
@@ -5,13 +5,9 @@
#pragma once
-#include <queue>
-
-#include "sound/samples.h"
-
-//**************************************************************************
-// TYPE DEFINITIONS
-//**************************************************************************
+#define MINIMP3_ONLY_MP3
+#define MINIMP3_NO_STDIO
+#include "minimp3/minimp3.h"
class mas3507d_device : public device_t, public device_sound_interface
{
@@ -19,12 +15,15 @@ public:
// construction/destruction
mas3507d_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+ auto sample_cb() { return cb_sample.bind(); }
+
int i2c_scl_r();
int i2c_sda_r();
void i2c_scl_w(bool line);
void i2c_sda_w(bool line);
- void set_samples(samples_device *sample) { m_samples = sample; }
+ void reset_sample_count() { total_sample_count = 0; }
+ u32 get_sample_count() const { return total_sample_count; }
protected:
virtual void device_start() override;
@@ -32,12 +31,23 @@ protected:
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
private:
+ devcb_read16 cb_sample;
+
enum { IDLE, STARTED, NAK, ACK, ACK2 } i2c_bus_state;
enum { UNKNOWN, VALIDATED, WRONG } i2c_bus_address;
+ std::array<u8, 8000> mp3data;
+ std::array<mp3d_sample_t, MINIMP3_MAX_SAMPLES_PER_FRAME> samples;
bool i2c_scli, i2c_sclo, i2c_sdai, i2c_sdao;
int i2c_bus_curbit;
uint8_t i2c_bus_curval;
+ int mp3_count, sample_count, current_rate;
+ u32 total_sample_count;
+
+ mp3dec_t mp3_dec;
+ mp3dec_frame_info_t mp3_info;
+
+ sound_stream *stream;
void i2c_nak();
bool i2c_device_got_address(uint8_t address);
@@ -54,7 +64,8 @@ private:
void run_program(uint32_t adr);
void reg_write(uint32_t adr, uint32_t val);
- samples_device *m_samples;
+ void fill_buffer();
+ void append_buffer(stream_sample_t **outputs, int &pos, int samples);
};