Renaming to a more appropriate name

This commit is contained in:
Martyn 2022-02-11 20:07:21 +01:00
parent d0f7d1a7f8
commit 56d44e6f23
3 changed files with 25 additions and 25 deletions

View File

@ -33,9 +33,9 @@ Coming soon!
Same general code as vidplayback but buffers the ENTIRE file to allow for seeking. I do NOT recommend this for general playback but for some purposes, this will suffice. Same general code as vidplayback but buffers the ENTIRE file to allow for seeking. I do NOT recommend this for general playback but for some purposes, this will suffice.
## Audio Spectrum ## Audio Waveform
A widget to create an audio spectrum plot of []int32 data A widget to display an audio waveform plot of []int32 data
|Field|Type|Effect|Values| |Field|Type|Effect|Values|
|---|---|---|---| |---|---|---|---|

View File

@ -9,24 +9,24 @@ import (
"fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/container" "fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/theme"
"git.martyn.berlin/martyn/fyne-widgets/pkg/audiospectrum"
"git.martyn.berlin/martyn/fyne-widgets/pkg/layouts" "git.martyn.berlin/martyn/fyne-widgets/pkg/layouts"
"git.martyn.berlin/martyn/fyne-widgets/pkg/waveform"
) )
func main() { func main() {
a := app.New() a := app.New()
w := a.NewWindow("VUMeter") w := a.NewWindow("Waveform")
randomAudioData := make([]int32, 1200) randomAudioData := make([]int32, 1200)
for i := 0; i < 1200; i++ { for i := 0; i < 1200; i++ {
randomAudioData[i] = rand.Int31() randomAudioData[i] = rand.Int31()
} }
as := audiospectrum.NewAudioSpectrum(randomAudioData) as := waveform.NewWaveform(randomAudioData)
as2 := audiospectrum.NewAudioSpectrum(randomAudioData) as2 := waveform.NewWaveform(randomAudioData)
as2.OverrideBackground = true as2.OverrideBackground = true
as2.OverrideBackgroundColor = color.RGBA{0, 0, 0xff, 0xff} // no effect because of the next line as2.OverrideBackgroundColor = color.RGBA{0, 0, 0xff, 0xff} // no effect because of the next line
as2.TransparentBackground = true as2.TransparentBackground = true
as2.SetMinSize(fyne.NewSize(1200, 64)) as2.SetMinSize(fyne.NewSize(1200, 64))
as3 := audiospectrum.NewAudioSpectrum(randomAudioData) as3 := waveform.NewWaveform(randomAudioData)
as3.StretchSamples = true as3.StretchSamples = true
as3.SetMinSize(fyne.NewSize(100, 64)) as3.SetMinSize(fyne.NewSize(100, 64))
as3.OverrideForeground = true as3.OverrideForeground = true

View File

@ -1,4 +1,4 @@
package audiospectrum package waveform
import ( import (
"image" "image"
@ -17,7 +17,7 @@ import (
// //
// A visualisation of an audio stream widget with themed or overridden background and foreground // A visualisation of an audio stream widget with themed or overridden background and foreground
// //
type AudioSpectrum struct { type Waveform struct {
widget.BaseWidget // Inherit from BaseWidget widget.BaseWidget // Inherit from BaseWidget
audioData []int32 // The data to display in the widget audioData []int32 // The data to display in the widget
StretchSamples bool StretchSamples bool
@ -32,8 +32,8 @@ type AudioSpectrum struct {
// //
// Create a Widget and Extend (initialiase) the BaseWidget // Create a Widget and Extend (initialiase) the BaseWidget
// //
func NewAudioSpectrum(data []int32) *AudioSpectrum { func NewWaveform(data []int32) *Waveform {
w := &AudioSpectrum{ // Create this widget with an initial text value w := &Waveform{ // Create this widget with an initial text value
audioData: data, audioData: data,
StretchSamples: false, StretchSamples: false,
TransparentBackground: false, TransparentBackground: false,
@ -50,15 +50,15 @@ func NewAudioSpectrum(data []int32) *AudioSpectrum {
// //
// Create the renderer. This is called by the fyne application // Create the renderer. This is called by the fyne application
// //
func (w *AudioSpectrum) CreateRenderer() fyne.WidgetRenderer { func (w *Waveform) CreateRenderer() fyne.WidgetRenderer {
// Pass this widget to the renderer so it can access the text field // Pass this widget to the renderer so it can access the text field
return newAudioSpectrumRenderer(w) return newWaveformRenderer(w)
} }
// //
// Set the minsize (default is 200x64) // Set the minsize (default is 200x64)
// //
func (w *AudioSpectrum) SetMinSize(newSize fyne.Size) { func (w *Waveform) SetMinSize(newSize fyne.Size) {
// Pass this widget to the renderer so it can access the text field // Pass this widget to the renderer so it can access the text field
w.minSize = newSize w.minSize = newSize
} }
@ -66,8 +66,8 @@ func (w *AudioSpectrum) SetMinSize(newSize fyne.Size) {
// //
// Widget Renderer code starts here // Widget Renderer code starts here
// //
type audioSpectrumRenderer struct { type waveformRenderer struct {
widget *AudioSpectrum // Reference to the widget holding the current state widget *Waveform // Reference to the widget holding the current state
background *canvas.Rectangle // A background rectangle background *canvas.Rectangle // A background rectangle
canvas *canvas.Raster // The waveform canvas *canvas.Raster // The waveform
} }
@ -78,8 +78,8 @@ type audioSpectrumRenderer struct {
// //
// Do not size or move canvas objects here. // Do not size or move canvas objects here.
// //
func newAudioSpectrumRenderer(theWidget *AudioSpectrum) *audioSpectrumRenderer { func newWaveformRenderer(theWidget *Waveform) *waveformRenderer {
r := &audioSpectrumRenderer{ r := &waveformRenderer{
widget: theWidget, widget: theWidget,
background: canvas.NewRectangle(theme.BackgroundColor()), background: canvas.NewRectangle(theme.BackgroundColor()),
} }
@ -98,7 +98,7 @@ func int32Map(x int32, in_min int32, in_max int32, out_min int32, out_max int32)
return int32(r) return int32(r)
} }
func (r *audioSpectrumRenderer) audioDataToImage(w, h int) image.Image { func (r *waveformRenderer) audioDataToImage(w, h int) image.Image {
foregroundColor := theme.ForegroundColor() foregroundColor := theme.ForegroundColor()
if r.widget.OverrideForeground { if r.widget.OverrideForeground {
foregroundColor = r.widget.OverrideForegroundColor foregroundColor = r.widget.OverrideForegroundColor
@ -113,7 +113,7 @@ func (r *audioSpectrumRenderer) audioDataToImage(w, h int) image.Image {
i := int32(0) i := int32(0)
for i = 0; i < int32(len(r.widget.audioData)); i++ { for i = 0; i < int32(len(r.widget.audioData)); i++ {
sample := r.widget.audioData[i] sample := r.widget.audioData[i]
// /2 because we draw spectrums with 0 at the middle! // /2 because we draw waveforms with 0 at the middle!
sampleheight := int32Map(sample, 0, math.MaxInt32, 0, int32(h/2)) sampleheight := int32Map(sample, 0, math.MaxInt32, 0, int32(h/2))
y := int32(0) y := int32(0)
//center line //center line
@ -137,7 +137,7 @@ func (r *audioSpectrumRenderer) audioDataToImage(w, h int) image.Image {
// //
// Note: The background and foreground colours are set from the current theme // Note: The background and foreground colours are set from the current theme
// //
func (r *audioSpectrumRenderer) Refresh() { func (r *waveformRenderer) Refresh() {
backgroundColor := theme.BackgroundColor() backgroundColor := theme.BackgroundColor()
if r.widget.OverrideBackground { if r.widget.OverrideBackground {
backgroundColor = color.RGBA{0, 0, 0xff, 0xff} //r.widget.OverrideBackgroundColor backgroundColor = color.RGBA{0, 0, 0xff, 0xff} //r.widget.OverrideBackgroundColor
@ -151,7 +151,7 @@ func (r *audioSpectrumRenderer) Refresh() {
// Given the size required by the fyne application move and re-size the // Given the size required by the fyne application move and re-size the
// canvas objects. // canvas objects.
// //
func (r *audioSpectrumRenderer) Layout(s fyne.Size) { func (r *waveformRenderer) Layout(s fyne.Size) {
// Make sure the background fills the widget // Make sure the background fills the widget
r.background.Resize(s) r.background.Resize(s)
r.canvas.Resize(s) r.canvas.Resize(s)
@ -162,7 +162,7 @@ func (r *audioSpectrumRenderer) Layout(s fyne.Size) {
// Create a minimum size for the widget. // Create a minimum size for the widget.
// The smallest size is the size of the text with a border defined by the theme padding // The smallest size is the size of the text with a border defined by the theme padding
// //
func (r *audioSpectrumRenderer) MinSize() fyne.Size { func (r *waveformRenderer) MinSize() fyne.Size {
// Default is set in newSpectrumRenderer, overridable by users // Default is set in newSpectrumRenderer, overridable by users
return r.widget.minSize return r.widget.minSize
} }
@ -170,7 +170,7 @@ func (r *audioSpectrumRenderer) MinSize() fyne.Size {
// //
// Return a list of each canvas object. // Return a list of each canvas object.
// //
func (r *audioSpectrumRenderer) Objects() []fyne.CanvasObject { func (r *waveformRenderer) Objects() []fyne.CanvasObject {
if r.widget.TransparentBackground { if r.widget.TransparentBackground {
return []fyne.CanvasObject{r.canvas} return []fyne.CanvasObject{r.canvas}
} }
@ -180,4 +180,4 @@ func (r *audioSpectrumRenderer) Objects() []fyne.CanvasObject {
// //
// Cleanup if resources have been allocated // Cleanup if resources have been allocated
// //
func (r *audioSpectrumRenderer) Destroy() {} func (r *waveformRenderer) Destroy() {}