#ifndef AUDIOPREVIEWWIDGET_H #define AUDIOPREVIEWWIDGET_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include "settings.h" class AudioPreviewWidget : public QWidget { Q_OBJECT public: explicit AudioPreviewWidget(QWidget *parent = nullptr); ~AudioPreviewWidget(); bool loadFromData(const QByteArray &data, const QString &filename); void setMetadata(const QVariantMap &metadata); private slots: void onPlayPause(); void onStop(); void onPositionChanged(qint64 position); void onDurationChanged(qint64 duration); void onSliderMoved(int position); void onMediaStatusChanged(QMediaPlayer::MediaStatus status); void onUpdatePosition(); void applyTheme(const Theme &theme); private: void updateTimeLabel(); void parseWavHeader(const QByteArray &data); void drawWaveform(); void updateWaveformPosition(); protected: void showEvent(QShowEvent *event) override; void resizeEvent(QResizeEvent *event) override; private: QMediaPlayer *mPlayer; QAudioOutput *mAudioOutput; QBuffer *mAudioBuffer; QByteArray mAudioData; QTimer *mPositionTimer; // UI elements QLabel *mFilenameLabel; QLabel *mWaveformLabel; QLabel *mTimeLabel; QPushButton *mPlayButton; QPushButton *mStopButton; QSlider *mPositionSlider; QSlider *mVolumeSlider; QTreeWidget *mMetadataTree; qint64 mDuration; QString mFilename; QPixmap mWaveformPixmap; // Store base waveform for position overlay double mCalculatedDuration; // Duration in seconds from WAV header // WAV info int mSampleRate; int mChannels; int mBitsPerSample; int mDataSize; int mAudioFormat; // 1=PCM, 2=ADPCM, etc. bool mBigEndian; // Theme colors QColor mAccentColor; QColor mBgColor; QColor mPanelColor; QColor mTextColor; QColor mTextColorMuted; QColor mBorderColor; }; #endif // AUDIOPREVIEWWIDGET_H