diff --git a/apps/picsa-tools/farmer-content/src/app/pages/home/farmer-home.component.html b/apps/picsa-tools/farmer-content/src/app/pages/home/farmer-home.component.html
index c28d92144..d0e93daf8 100644
--- a/apps/picsa-tools/farmer-content/src/app/pages/home/farmer-home.component.html
+++ b/apps/picsa-tools/farmer-content/src/app/pages/home/farmer-home.component.html
@@ -25,4 +25,15 @@
{{ step.title | translate }}
}
+
+
Test Audio Playback
+
Web Audio
+
+
File Audio (TODO)
+
+
diff --git a/apps/picsa-tools/farmer-content/src/app/pages/home/farmer-home.component.ts b/apps/picsa-tools/farmer-content/src/app/pages/home/farmer-home.component.ts
index 9fbb17c79..4777812c0 100644
--- a/apps/picsa-tools/farmer-content/src/app/pages/home/farmer-home.component.ts
+++ b/apps/picsa-tools/farmer-content/src/app/pages/home/farmer-home.component.ts
@@ -7,8 +7,11 @@ import { RouterModule } from '@angular/router';
import { FARMER_CONTENT_DATA } from '@picsa/data';
import { FadeInOut } from '@picsa/shared/animations';
import { PicsaScrollRestoreDirective } from '@picsa/shared/directives';
+import { AudioPlaybackComponent } from '@picsa/shared/features/audio-playback';
+import { AudioService } from '@picsa/shared/features/audio-playback';
import { PicsaTranslateModule } from '@picsa/shared/modules';
+// import TestAudio from '@picsa/farmer-content/src/assets/'
@Component({
selector: 'farmer-home',
standalone: true,
@@ -20,11 +23,14 @@ import { PicsaTranslateModule } from '@picsa/shared/modules';
PicsaScrollRestoreDirective,
PicsaTranslateModule,
RouterModule,
+ AudioPlaybackComponent
],
+ providers: [AudioService],
templateUrl: './farmer-home.component.html',
styleUrl: './farmer-home.component.scss',
animations: [FadeInOut()],
})
export class FarmerContentHomeComponent {
public content = FARMER_CONTENT_DATA;
+ // public testAudio = TestAudio
}
diff --git a/apps/picsa-tools/farmer-content/src/assets/test-audio.mp3 b/apps/picsa-tools/farmer-content/src/assets/test-audio.mp3
new file mode 100644
index 000000000..e00b94f86
Binary files /dev/null and b/apps/picsa-tools/farmer-content/src/assets/test-audio.mp3 differ
diff --git a/libs/shared/src/features/audio-playback/audio-playback.component.html b/libs/shared/src/features/audio-playback/audio-playback.component.html
new file mode 100644
index 000000000..1af29aa74
--- /dev/null
+++ b/libs/shared/src/features/audio-playback/audio-playback.component.html
@@ -0,0 +1,7 @@
+
+ @if (isAudioPlaying) {
+
+ } @else{
+
+ }
+
diff --git a/libs/shared/src/features/audio-playback/audio-playback.component.scss b/libs/shared/src/features/audio-playback/audio-playback.component.scss
new file mode 100644
index 000000000..74e6cc6e1
--- /dev/null
+++ b/libs/shared/src/features/audio-playback/audio-playback.component.scss
@@ -0,0 +1,15 @@
+.audio-button{
+ outline: none;
+ background-color: none;
+ border: none;
+ padding: 5px;
+ &:hover{
+ background-color: none;
+ }
+ .mat-icon{
+ color: var(--color-secondary);
+ font-size: 28px;
+ height: 32px;
+ width: 32px;
+ }
+}
\ No newline at end of file
diff --git a/libs/shared/src/features/audio-playback/audio-playback.component.spec.ts b/libs/shared/src/features/audio-playback/audio-playback.component.spec.ts
new file mode 100644
index 000000000..b67d52c7e
--- /dev/null
+++ b/libs/shared/src/features/audio-playback/audio-playback.component.spec.ts
@@ -0,0 +1,21 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { AudioPlaybackComponent } from './audio-playback.component';
+
+describe('AudioPlaybackComponent', () => {
+ let component: AudioPlaybackComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [AudioPlaybackComponent],
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(AudioPlaybackComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/libs/shared/src/features/audio-playback/audio-playback.component.ts b/libs/shared/src/features/audio-playback/audio-playback.component.ts
new file mode 100644
index 000000000..f8a26d913
--- /dev/null
+++ b/libs/shared/src/features/audio-playback/audio-playback.component.ts
@@ -0,0 +1,32 @@
+import { Component, OnDestroy, Input } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { AudioService } from './audio-playback.service';
+import { MatIconModule } from '@angular/material/icon';
+import { MatButtonModule } from '@angular/material/button';
+
+@Component({
+ selector: 'picsa-audio-playback',
+ standalone: true,
+ imports:[CommonModule, MatIconModule, MatButtonModule],
+ templateUrl: './audio-playback.component.html',
+ styleUrls: ['./audio-playback.component.scss'],
+})
+export class AudioPlaybackComponent implements OnDestroy {
+ @Input() audioUrl: string;
+ isAudioPlaying = false;
+
+ constructor(private audioService: AudioService) {}
+
+ togglePlayback(): void {
+ this.isAudioPlaying = !this.isAudioPlaying;
+ if (this.audioService.isPlaying()) {
+ this.audioService.pauseAudio();
+ } else {
+ this.audioService.playAudio(this.audioUrl);
+ }
+ }
+
+ ngOnDestroy(): void {
+ this.audioService.stop();
+ }
+}
diff --git a/libs/shared/src/features/audio-playback/audio-playback.service.ts b/libs/shared/src/features/audio-playback/audio-playback.service.ts
new file mode 100644
index 000000000..f9201138e
--- /dev/null
+++ b/libs/shared/src/features/audio-playback/audio-playback.service.ts
@@ -0,0 +1,34 @@
+import { Injectable } from '@angular/core';
+
+@Injectable({
+ providedIn: 'root',
+})
+export class AudioService {
+ private audio: HTMLAudioElement;
+
+ constructor() {
+ this.audio = new Audio();
+ }
+
+ playAudio(url: string): void {
+ if (this.audio.src !== url) {
+ this.audio.src = url;
+ }
+ this.audio.play();
+ }
+
+ pauseAudio(): void {
+ this.audio.pause();
+ }
+
+ isPlaying(): boolean {
+ return !this.audio.paused;
+ }
+
+ stop(): void {
+ if (this.audio) {
+ this.audio.pause();
+ this.audio.currentTime = 0;
+ }
+ }
+}
diff --git a/libs/shared/src/features/audio-playback/index.ts b/libs/shared/src/features/audio-playback/index.ts
new file mode 100644
index 000000000..19e78da5a
--- /dev/null
+++ b/libs/shared/src/features/audio-playback/index.ts
@@ -0,0 +1,2 @@
+export * from './audio-playback.component';
+export * from './audio-playback.service';
diff --git a/libs/shared/src/features/index.ts b/libs/shared/src/features/index.ts
index 84e09c6a3..ad16f28a0 100644
--- a/libs/shared/src/features/index.ts
+++ b/libs/shared/src/features/index.ts
@@ -1,4 +1,5 @@
export * from './animations';
+export * from './audio-playback';
export * from './charts';
export * from './data-table';
export * from './dialog';
diff --git a/libs/theme/src/themes/_mixins.scss b/libs/theme/src/themes/_mixins.scss
index cf9e957cd..5e188d1b8 100644
--- a/libs/theme/src/themes/_mixins.scss
+++ b/libs/theme/src/themes/_mixins.scss
@@ -8,4 +8,5 @@
--color-black: #1a2138;
--color-light: #d8d8d8;
--color-white: #ffffff;
+ --color-secondary-200: #{map-get($accent, 200)};
}