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)}; }