PJSUA sampling issues with ALSA

I have been trying to make a VOIP calling device with a raspberry pi3 and MIC+ using PJSUA. There seems to be a bug when attempting to make/receive a call.

pjsua-armv7l-unknown-linux-gnueabihf: ../src/pjmedia/conference.c:1895: get_frame: Assertion `frame->size == conf->samples_per_frame * conf->bits_per_sample / 8' failed.

To fix this: change /root/.asoundrc

options snd_rpi_googlevoicehat_soundcard index=0

pcm.softvol {
type softvol
slave.pcm dmix
period_size 320
buffer_size 10240
control{
name Master
card 0
}
}

pcm.micboost{
type softvol
slave.pcm dsnoop
period_size 320
buffer_size 10240
control {
name Micro
card 0
}
min_dB -10.0
max_dB 50.0
resolution 256}

pcm.!default {
type asym
playback.pcm "plug:softvol"
capture.pcm "plug:micboost"
}

ctl.!default {
type hw
card 0
}

If it still does not work then refer to this:
https://community.volumio.org/t/change-the-default-alsa-sample-rate-to-44100/116
http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/2010-April/010721.html

PJSIP on Raspberry Pi via ALSA

Download and extract

apt−get install build−essential automake autoconf libasound2-dev
wget https://github.com/pjsip/pjproject/archive/2.10.tar.gz
tar -xvf 2.10.tar.gz
cd pjproject-2.10

Modify config_site.h

#define PJMEDIA_AUDIO_DEV_HAS_ALSA 1

Compile

./configure && make dep && make
/root/pjproject-2.10/pjsip-apps/bin/pjsua-armv7l-unknown-linux-gnueabihf  --config /root/pjproject-2.10/pjsip-apps/bin/pjsip.conf

Bing Visual Search

A sample project that performs a bing visual search and returns a json response.

using Newtonsoft.Json;
using System;
using System.IO;
using System.Net.Http;

/* This sample makes a call to the Bing Visual Search API with a query image and returns similar images with details.
 * Bing Visual Search API: 
 * https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bingvisualsearch/images/visualsearch
 */

namespace BingVisualSearch
{
    internal class Program
    {
        // Set the path to the image
        private static string imagePath = "";
        // Set your access key
        private static string accessKey = "";
        private static Uri endpointUrl = new Uri("https://api.cognitive.microsoft.com/bing/v7.0/images/visualsearch");

        private static HttpClient client;
        private static Uri imgUri;

        private static void Main()
        {
            //Define change this to receive a URL if you want
            imgUri = new Uri(imagePath);

            client = new HttpClient();
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", accessKey);

            var request =
                new
                {
                    imageInfo = new
                    {
                        cropArea = new
                        {
                            top = 0.0,
                            left = 0.0,
                            right = 0.0,
                            bottom = 0.0
                        },
                        url = imgUri.IsFile ? (string) null : imgUri.ToString()
                    }
                };
            var mfdc = new MultipartFormDataContent();

            // Part #2 - Add binary image file if using a local image
            // NOTE: the file needs to be an image file that is < 1MB
            if (imgUri.IsFile)
            {
                var path = imgUri.LocalPath;

                var fs = new FileStream(path, FileMode.Open, FileAccess.Read);

                var sizeMb = fs.Length / 1024.0 / 1024.0;

                if (sizeMb > 1.0) // Enforces file size restriction
                    throw new ApplicationException(
                        $"The file {imgUri.LocalPath} is greater than 1MB. Please resize it and try again");

                var sc = new StreamContent(fs);
                mfdc.Add(
                    sc, // binay image path
                    "image", // name = image
                    "image" // filename = image
                );
            }

            // Part #3 - Add KnowledgeRequest JSON object
            mfdc.Add(new StringContent(JsonConvert.SerializeObject(request)), "knowledgeRequest");

            // Part #4 - Invoke the service and read the response
            var response = client.PostAsync(endpointUrl, mfdc);

            // Part # 5 - Do what you like with the data
            Console.WriteLine(response.Result.Content.ReadAsStringAsync().Result);
            File.WriteAllText(@"response.txt", response.Result.Content.ReadAsStringAsync().Result);
            Console.ReadLine();
        }
    }
}

References:

Github Link